gpt4 book ai didi

python - tkinter 的时间选择器

转载 作者:行者123 更新时间:2023-12-02 14:48:55 30 4
gpt4 key购买 nike

我正在寻找一种在 tkinter 应用程序中实现时间选择器的方法。

我能够使用旋转框小部件并使用 @PRMoureu's 来实现这一点(可能不是最好的方式)验证的绝妙答案。我现在拥有的是这个 -

import tkinter as tk

class App(tk.Frame):
def __init__(self,parent):
super().__init__(parent)
self.reg=self.register(self.hour_valid)
self.hourstr=tk.StringVar(self,'10')
self.hour = tk.Spinbox(self,from_=0,to=23,wrap=True,validate='focusout',validatecommand=(self.reg,'%P'),invalidcommand=self.hour_invalid,textvariable=self.hourstr,width=2)
self.reg2=self.register(self.min_valid)
self.minstr=tk.StringVar(self,'30')
self.min = tk.Spinbox(self,from_=0,to=59,wrap=True,validate='focusout',validatecommand=(self.reg2,'%P'),invalidcommand=self.min_invalid,textvariable=self.minstr,width=2)
self.hour.grid()
self.min.grid(row=0,column=1)
def hour_invalid(self):
self.hourstr.set('10')
def hour_valid(self,input):
if (input.isdigit() and int(input) in range(24) and len(input) in range(1,3)):
valid = True
else:
valid = False
if not valid:
self.hour.after_idle(lambda: self.hour.config(validate='focusout'))
return valid
def min_invalid(self):
self.minstr.set('30')
def min_valid(self,input):
if (input.isdigit() and int(input) in range(60) and len(input) in range(1,3)):
valid = True
else:
valid = False
if not valid:
self.min.after_idle(lambda: self.min.config(validate='focusout'))
return valid
root = tk.Tk()
App(root).pack()
root.mainloop()

这在 GUI 应用程序中似乎是一个非常普遍的要求,所以我认为必须有一种更标准的方法来实现这一点。如何以更简洁的方式实现用户选择的时间小部件?我问这个是因为我想要实现的微小功能是在递增/递减 minute-spinbox 时,如果它循环结束,hour-spinbox 应该相应地增加/减少。我想通过设置回调函数来实现这一点,但我不知道旋转框的哪个按钮被触发了(向上或向下)。

最佳答案

您可以跟踪您 session 记录的变化并采取相应行动。下面的示例显示了如何在分钟数增加到 59 时自动增加小时数;你可以适应并弄清楚如何做减少的部分。

import tkinter as tk

class App(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.hourstr=tk.StringVar(self,'10')
self.hour = tk.Spinbox(self,from_=0,to=23,wrap=True,textvariable=self.hourstr,width=2,state="readonly")
self.minstr=tk.StringVar(self,'30')
self.minstr.trace("w",self.trace_var)
self.last_value = ""
self.min = tk.Spinbox(self,from_=0,to=59,wrap=True,textvariable=self.minstr,width=2,state="readonly")
self.hour.grid()
self.min.grid(row=0,column=1)

def trace_var(self,*args):
if self.last_value == "59" and self.minstr.get() == "0":
self.hourstr.set(int(self.hourstr.get())+1 if self.hourstr.get() !="23" else 0)
self.last_value = self.minstr.get()

root = tk.Tk()
App(root).pack()
root.mainloop()

关于python - tkinter 的时间选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57034118/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com