tkinter小部件实现

时间:2018-05-29 10:06:35

标签: python python-3.x tkinter widget

我对类和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”文件中。 不幸的是,我一直在努力使它在我的主代码中有效地显示出来。 任何人都可以帮我/给我一个暗示吗? 非常感谢提前!

1 个答案:

答案 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__':,那里的例子就是。