【问题标题】:How to get list items in a for x in range loop to show on tkinter frame如何在 for x in range 循环中获取列表项以显示在 tkinter 框架上
【发布时间】:2016-01-21 12:43:08
【问题描述】:

这是原始代码的一部分。我没有收到任何错误消息,但当我打开日历框架时似乎没有显示任何内容。我让 submit(self) 函数在 python 中打印出 Control.counter 的值,当它被调用时,当 Control.counter 值大于 0 时没有任何显示。

class Setup_Info(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent, background="white")

        scrollbar = tk.Scrollbar(self)
        scrollbar.pack(side='right', fill='y')
        title2 = tk.Label(self, text="Setup Information", font=LARGE_FONT, background="white")
        title2.place(relx=0.25, y=0.00, relheight=0.2, relwidth=0.5)

        self.number = tk.Entry(self)
        self.number.place(relx=0.2, y=140, relheight=0.05)

        question1 = tk.Label(self, text="Name of medication:", font=FONT, background="white")
        question1.place(relx=0.2, y=200, relheight=0.05)
        self.entry1 = tk.Entry(self)
        self.entry1.place(relx=0.2, y=240, relheight=0.05, relwidth=0.2)

        question2 = tk.Label(self, text="When it was prescribed:", font=FONT, background="white")
        question2.place(relx=0.2, y=300, relheight=0.05)
        self.entry2 = tk.Entry(self)
        self.entry2.place(relx=0.2, y=340, relheight=0.05, relwidth=0.2)

        question3 = tk.Label(self, text="When you stop the medication:", font=FONT, background="white")
        question3.place(relx=0.2, y=400, relheight=0.05)
        self.entry3 = tk.Entry(self)
        self.entry3.place(relx=0.2, y=440, relheight=0.05, relwidth=0.2)

        question4 = tk.Label(self, text="How many times in a day do you take it:", font=FONT, background="white")
        question4.place(relx=0.2, y=500, relheight=0.05)
        self.entry4 = ttk.Combobox(self)
        self.entry4.config(values = ('1','2','3'))
        self.entry4.place(relx=0.45, y=540, relheight=0.05, relwidth=0.2)

        enter = tk.Button(self, text="Enter", font=LARGE_FONT, background="white",
                          command=self.submit)
        enter.place(relx=0.45, rely=0.2, relheight=0.05, relwidth=0.2)

        enter2 = tk.Button(self, text="Enter", font=LARGE_FONT, background="white",
                          command=lambda: controller.show_frame(Calendar))
        enter2.pack()

        Setup_Info.list1=[]
        Setup_Info.list2=[]
        Setup_Info.list3=[]
        Setup_Info.list4=[]

    def submit(self):
        print(self.number.get())
        Control.counter += int(self.number.get())
        print(Control.counter)
        entry1=self.entry1.get()
        entry2=self.entry2.get()
        entry3=self.entry3.get()
        entry4=self.entry4.get()
        Setup_Info.list1.append(entry1)
        Setup_Info.list2.append(entry2)
        Setup_Info.list3.append(entry3)
        Setup_Info.list4.append(entry4)
        print(Setup_Info.list1)
        print(Setup_Info.list2)
        print(Setup_Info.list3)
        print(Setup_Info.list4)



class Calendar(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent, background="white")

        if Control.counter > 0:
            display_info()

    def display_info():
        for x in range(Control.counter):
            self.medicine1 = tk.Label(self, text=(Setup_Info.list1[x]), font=LARGE_FONT, bg="white")
            self.medicine1.pack()

            self.medicine2 = tk.Label(self, text=(Setup_Info.list2[x]), font=LARGE_FONT, bg="white")
            self.medicine1.pack()

【问题讨论】:

  • 您是否进行了任何调试以查看问题是日历框架未显示,还是框架显示但内部小部件未显示?看起来问题可能出在 show_frame 函数中,但您没有显示该代码。

标签: python list for-loop tkinter function


【解决方案1】:

问题是你的Calendar 类在程序启动时被实例化了。在那个时间点,Control.counter 为零(我假设),因为用户还没有机会输入任何内容。因此,框架是空的。

当你去显示框架时,你没有重新创建框架,或者重新初始化内容,所以窗口是空的。

您将需要修改代码以在需要时按需创建类,或者在显示框架之前直接调用display_info 方法。

【讨论】:

    【解决方案2】:

    对于一个似乎您每次初始化 Setup_info 对象时都在 Setup_info 中创建类变量,很有可能每次创建一个列表时列表都被重置为空,但我无法确定基于您拥有的代码提供,尝试从 init()

    中删除它
        Setup_Info.list1=[]
        Setup_Info.list2=[]
        Setup_Info.list3=[]
        Setup_Info.list4=[]
    

    并将它们的定义放在类本身中:

    class Setup_Info(tk.Frame):
        list1=[]
        list2=[]
        list3=[]
        list4=[]
        def __init__ ...
    

    您的问题显然与 Control 是什么有关,因此如果没有相应的代码,我也无能为力...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2021-12-13
      相关资源
      最近更新 更多