我对类和tkinter一般都是新手。这是我的代码,我一直在尝试一个简单的界面,我可以在其中选择开始日期和结束日期,以便识别间隔。
import tkinter as tk
import Calendar as cal
class Application(tk.Frame):
def __init__(self, master = None):
super().__init__(master)
self.grid()
self.pack()
self.create_widgets()
def create_widgets(self):
self.winfo_toplevel().title("Choose date")
self.sd_button = tk.Label(self, text="Start date")
self.sd_button.pack()
self.ed_button = tk.Label(self, text="End date")
self.ed_button.pack()
self.sd_date_button = cal.Control(root)
self.sd_date_button.pack()
self.ed_date_button = cal.Control(root)
self.ed_date_button.pack()
root = tk.Tk()
my_gui = Application(root)
root.mainloop()
我想在“开始日期”和“结束日期”旁边实现一个按钮,允许我像弹出一样选择日期。 我从这个链接找到了一个可以完成工作的外部代码小部件:https://python-forum.io/Thread-Tkinter-tkinter-calendar-widget
所以我将链接中的代码加载到“Calendar.py”文件中。 不幸的是,我一直在努力使它在我的主代码中有效地显示出来。 任何人都可以帮我/给我一个暗示吗? 非常感谢提前!
答案 0 :(得分:0)
有几个问题。
您在__init__
中同时使用包和网格。
由于您导入Calendar.py,因此不在您的姓名中,您必须对此进行补偿。名称变为Calendar.Calendar
,因为包和类都命名为Calendar。
使用按钮代替标签,并将它们与命令相关联以打开日历。
保存对master的引用,以便您可以调用它。
我还将 SPACE 绑定到打印输出功能。
import tkinter as tk
import Calendar
class Application(tk.Frame):
def __init__(self, master = None):
super().__init__(master)
self.master = master
self.grid()
self.data = {}
self.create_widgets()
def create_widgets(self):
self.winfo_toplevel().title("Choose date")
self.sd_button = tk.Button(self, text="Start date", command=self.popup)
self.sd_button.grid()
self.ed_button = tk.Button(self, text="End date", command=self.popup)
self.ed_button.grid()
self.master.bind('<space>', self.print_selected_date)
def popup(self):
child = tk.Toplevel()
cal = Calendar.Calendar(child, self.data)
def print_selected_date(self, event):
print(self.data)
root = tk.Tk()
my_gui = Application(root)
root.mainloop()
班级Control
不是日历的一部分,但作为如何使用它的示例包含在内。这是构建包的常用方法。寻找行if __name__ == '__main__':
,那里的例子就是。