Python,Glade,GTK +

问题描述 投票:-1回答:1

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

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

ps。对不起,英语不好。


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()
python gtk3 glade
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.