【发布时间】: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