【问题标题】:Python, Glade, GTK+蟒蛇,格莱德,GTK+
【发布时间】:2020-06-03 16:20:06
【问题描述】:

我正在为我的 GTK GUI 苦苦挣扎……

我为灯光等制作了一个 GUI,到目前为止“一切”都可以正常工作,但我无法确定一个计时器,它会在给定时间启动灯光并结束它。左侧的旋转按钮用于“开始时间”,右侧的旋转按钮用于“结束时间”。每个对象都有一个用于启用/禁用计时器的复选框,每次输入或编辑时间时,都需要按下确定按钮。有人可以帮帮我吗?

import datetime
import gi
import time

gi.require_version('Gtk', '3.0')
from gi.repository import Gtk as gtk, GObject, GLib





class Main:
    def __init__(self):
        gladeFile = "main.glade"
        self.builder = gtk.Builder()
        self.builder.add_from_file(gladeFile)
        self.builder.connect_signals(self)

        self.window        = self.builder.get_object("Main")
        self.window.connect("delete-event", gtk.main_quit)
        self.window.show_all()
        self.window.set_decorated(False)
        self.labelClock  = self.builder.get_object("Time")
        self.labelDate   = self.builder.get_object("Date")
        self.Uur_LED_Aan = self.builder.get_object("Uur_LED_Aan")
        self.Uur_LED_Uit = self.builder.get_object("Uur_LED_Uit")
        self.Uur_Licht_Aan = self.builder.get_object("Uur_Licht_Aan")
        self.Uur_Licht_Uit = self.builder.get_object("Uur_Licht_Uit")
        self.Uur_Luik_Open = self.builder.get_object("Uur_Luik_Open")
        self.Uur_Luik_Dicht = self.builder.get_object("Uur_Luik_Dicht")

    def compare(self):
        ULA = self.OK()
        ULU = self.OK()
        start_hour = ULA
        start_minute = '00'
        end_hour = ULU
        end_minute = '00'

        start_time = int(start_hour) * 60 + int(start_minute)
        end_time = int(end_hour) * 60 + int(end_minute)
        current_time = datetime.datetime.now().hour * 60 + datetime.datetime.now().minute
        if start_time == current_time:
            print("LED ON")

        elif end_time == current_time:
            print("LED OFF")
        return True

    def ULED_Update(self):
        GLib.timeout_add(100, self.compare, True)





    def OK(self, button):
        ULA  = self.Uur_LED_Aan.get_value()
        ULU  = self.Uur_LED_Uit.get_value()
        ULIA = self.Uur_Licht_Aan.get_value()
        ULIU = self.Uur_Licht_Uit.get_value()
        ULO  = self.Uur_Luik_Open.get_value()
        ULD  = self.Uur_Luik_Dicht.get_value()

        print(ULA, ULU, ULIA, ULIU, ULO, ULD)
        return ULA, ULU, ULIA, ULIU, ULO, ULD


    def displayDate(self, state):
        Time_now = str(datetime.datetime.now().strftime("%d-%m-%Y"))
        self.labelDate.set_label(Time_now)
        return state,


    def displayclock(self, state):
        #  putting our datetime into a var and setting our label to the result.
        #  we need to return "True" to ensure the timer continues to run, otherwise it will only run once.
        Time_now = str(datetime.datetime.now().strftime("%H:%M:%S"))
        self.labelClock.set_label(Time_now)
        return state, Time_now

    # Initialize Timer
    def startclocktimer(self):
        #  this takes 2 args: (how often to update in millisec, the method to run)
        GLib.timeout_add(100, self.displayclock, True)

    def startDate(self):
        #  this takes 2 args: (how often to update in millisec, the method to run)
        GLib.timeout_add(100, self.displayDate, True)


    def Switch_LED(self, switch, gparam):
        if switch.get_active():
            state = "Led_On"
        else:
            state = "Led_Off"
        print("Led_Switch was", state)


    def Switch_Licht(self, switch, gparam):
        if switch.get_active():
            state = "Licht_on"
        else:
            state = "Licht_off"
        print("Licht_Switch was", state)

    def Luik_Open(self, button):
        state = "Rolluik_open"
        print(state)

    def Luik_Dicht(self, button):
        state = "Rolluik_dicht"
        print(state)

if __name__ == '__main__':
    main = Main()
    main.startclocktimer()
    main.startDate()
    main.ULED_Update()
    gtk.main()

【问题讨论】:

  • 我不确定我是否理解您的实际问题。您能否描述一下运行您发布的代码时会发生什么,以及这与您期望发生的情况有何不同?
  • 我将我的代码改回了我尝试的方式。我尝试比较实时时间,例如:现在是 22H,我的 LED 需要在 22H30 点亮,需要在 23H 熄灭。我做了一个名为“比较”等的定义......抱歉解释的问题和英语不好..我也有点累,今天早上 5 点之前一直在做这个 GUI

标签: python gtk3 glade


【解决方案1】:

启动一个单独的线程来更新计时器,在 GUI 的标签中显示时间。我在那里看到了一个例子https://github.com/f4iteightiz/UWR_scoreboard

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2010-10-21
    • 2016-05-28
    • 2014-08-01
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多