Python、林间空地、GTK+
Python, Glade, GTK+
我正在为我的 GTK GUI 苦苦挣扎...
我为灯光等制作了一个 GUI,到目前为止,“一切”都有效,但我无法弄清楚一个定时器会在给定时间点亮并结束它。左侧的旋转按钮用于“开始时间”,右侧的旋转按钮用于“结束时间”。每个对象都有一个计时器的 enabeling/disabeling 复选框,每次输入或编辑时间时,都需要按下确定按钮。有人可以帮我吗?
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()
启动一个单独的线程来更新在 GUI 的标签中显示时间的计时器。我在那里看到了一个例子 https://github.com/f4iteightiz/UWR_scoreboard
我正在为我的 GTK GUI 苦苦挣扎...
我为灯光等制作了一个 GUI,到目前为止,“一切”都有效,但我无法弄清楚一个定时器会在给定时间点亮并结束它。左侧的旋转按钮用于“开始时间”,右侧的旋转按钮用于“结束时间”。每个对象都有一个计时器的 enabeling/disabeling 复选框,每次输入或编辑时间时,都需要按下确定按钮。有人可以帮我吗?
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()
启动一个单独的线程来更新在 GUI 的标签中显示时间的计时器。我在那里看到了一个例子 https://github.com/f4iteightiz/UWR_scoreboard