Python 3.x Python3、Tkinter和用户输入时间请求

Python 3.x Python3、Tkinter和用户输入时间请求,python-3.x,class,methods,tkinter,clock,Python 3.x,Class,Methods,Tkinter,Clock,我在Python中的基本概念和措辞方面确实取得了一些进展,但当我们开始在混合中添加Tkinter时,我有点迷失了方向。BryanOakley在一个关于多窗口和Tkinter的问题上做出了巨大贡献,这个问题在网络上随处可见。我以他的例子为例,将它与我见过的其他一些例子结合起来,开始制作一个带有闹钟的时钟,当闹钟开始计时时,它会改变时钟的背景。问题是,我只是看不见穿过森林的树木,也不知道如何: A) 获取从Tkinter窗口显示的输入请求 B) 将alarm类中的用户输入调用到clock类中,以触发

我在Python中的基本概念和措辞方面确实取得了一些进展,但当我们开始在混合中添加Tkinter时,我有点迷失了方向。BryanOakley在一个关于多窗口和Tkinter的问题上做出了巨大贡献,这个问题在网络上随处可见。我以他的例子为例,将它与我见过的其他一些例子结合起来,开始制作一个带有闹钟的时钟,当闹钟开始计时时,它会改变时钟的背景。问题是,我只是看不见穿过森林的树木,也不知道如何:

A) 获取从Tkinter窗口显示的输入请求
B) 将alarm类中的用户输入调用到clock类中,以触发窗口背景更改

我认为我的问题是我不完全理解将不同的方法嵌套在哪里,以及如何获取存储用户数据的变量,并将其从字符串转换为时间格式。我想我只是需要一些指导,但是如果你认为我有点不知所措,那么请把我指给我看,这样我就可以继续练习了。这是我的想法,把这个或类似的东西放到tick()方法中,当然我想知道在Tkinter中输入到哪里。我在盘旋。帮助:

def wake(self):
    self.__init__(self, hour, min)
    self.hour = hour
    self.min = min
        input("what is the hour?",
        input("What is the min?", 
    hour = datetime.datetime.now().strftime("%I")
    min = datetime.datetime.now().strftime("%M")
    if self.hour and self.min == time1():
        label.config(text = time1, bg = "green")
    else:
        label.config(text = time1, bg = "red")
以下是我目前掌握的情况:

import tkinter as tk
from tkinter import font as tkfont
from tkinter import messagebox
import time
import datetime


class digitalClockApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.title_font = tkfont.Font(family='Helvetica', size=100, weight="bold", slant="italic")

        container = tk.Frame(self)
        container.pack(side = "top", fill= "both", expand =1)
        container.grid_rowconfigure(0,weight = 1)
        container.grid_columnconfigure(0, weight = 1)

        self.frames = {}
        for F in (introPage, clock, alarm):
            page_name = F.__name__
            frame = F(parent = container, controller = self)
            self.frames[page_name] = frame

            frame.grid(row = 0, column = 0, sticky = "nsew")
            self.geometry("640x480")

        self.show_frame("introPage")

    def show_frame(self, page_name):
        frame = self.frames[page_name]
        frame.tkraise()


class introPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        label = tk.Label(self, text = "Welcome", bg = "black", fg = "white", font = controller.title_font)
        label.pack(side = "top", fill = "both", expand = 1)

        button1 = tk.Button(self, text = "Go to Clock", command = lambda: controller.show_frame("clock"))
        button2 = tk.Button(self, text = "Go to Set Alarm", command = lambda: controller.show_frame("alarm"))
        button1.pack(side = "left")
        button2.pack(side = "left")

class clock(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        label = tk.Label(self, text = "", bg = "black", fg = "white", font = controller.title_font)
        label.pack(side = "top", fill = "both", expand = 1)
        button = tk.Button(self, text = "Home Screen", command = lambda: controller.show_frame("introPage"))
        button.pack()

        def tick(time1 = ""):
            time2 = time.strftime("%I:%M:%S")
            if time2 != time1:
                time1 = time2
                label.config(text = time1, bg = "red")
            label.after(200, tick)

        tick()

class alarm(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        label = tk.Label(self, text = "", bg = "black", fg = "white", font = controller.title_font)
        label.pack(side = "top", fill = "both", expand = 1)
        def wake():
        button = tk.Button(self, text = "Home Screen", command = lambda: controller.show_frame("introPage"))
        button.pack()



if __name__ == "__main__":
    app = digitalClockApp()
    app.mainloop()

坦白地说,我认为对于学习使用tkinter的人来说,切换帧的概念是一个糟糕的选择。这个例子从来没有打算作为初学者的起点,特别是像闹钟这样简单的东西。它增加了大量的开销,但带来的好处却微乎其微

我的建议是从一个窗口重新开始。添加小时和分钟的输入小部件、显示时钟的标签和启动时钟的按钮。这就是你做这个练习所需要的。可能需要几十行代码

您的
tick
方法可能或多或少可以按原样使用,不过如果您只显示整秒的时间,我看不出每秒更新时钟五次有什么意义


只有在你开始工作之后,你才应该开始尝试使用高级架构,比如“交换帧”代码

谢谢你的帮助!所以,我在尝试你的建议,但一旦我在一个类中添加了多个方法,我就挂断了。似乎我可以定义类,让时钟运行,但当我尝试添加一个报警按钮时,我就会出现属性错误,或者在定义变量之前指示调用变量的错误。使用Tkinter时,类中方法的顺序有什么诀窍吗?@RL_NooB:除了标准编程实践之外,没有其他诀窍:在使用它们之前定义东西,在多个地方保存对需要的东西的引用,等等。我会继续。我想我刚开始的时候已经吃不下了,但我在这里奋斗,学到了很多。再次感谢。