【问题标题】:checkbox won't appear in Tkinter using grid复选框不会出现在 Tkinter 中使用网格
【发布时间】:2015-06-30 17:08:11
【问题描述】:

我的复选框C1 没有出现,导致问题永远不会结束。这里发生了什么?

from Tkinter import *

class LabeledEntry(Frame):
    def __init__(self, parent, *args, **kargs):
        text = kargs.pop("text")
        Frame.__init__(self, parent)
        Label(self, text=text, justify=LEFT).grid(sticky=W, column=0, row=0)
        Entry(self, *args, **kargs).grid(sticky=E, column=1, row=0)

class User_Input:
    def __init__(self, parent, fields):

        GUIFrame = Frame(parent)
        GUIFrame.pack(expand=True, anchor=NW)

        field_index = 1
        for field in fields:
            self.field = LabeledEntry(GUIFrame, text=field)
            self.field.grid(column=0, row=field_index, pady=1)
            self.field.grid_columnconfigure(index = 0, minsize = 150)
            field_index += 1
        CheckVar1 = IntVar()
        self.C1 = Checkbutton(parent, text = "checkbox1", variable = CheckVar1, onvalue = 1, offvalue = 0)
        self.C1.grid(column=2, row=2)


fields = ['Entry Box 1:', 'Entry Box 2']


root = Tk()
MainFrame = User_Input(root, fields)
root.mainloop()

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    尝试将C1 上的.grid 调用更改为.pack(anchor = W)。您已经在 parent 框架上使用了 pack(带有 GUIFrame),因此 Tkinter 会很高兴地等待永远尝试决定使用哪个布局管理器。

    from Tkinter import *
    
    class LabeledEntry(Frame):
        def __init__(self, parent, *args, **kargs):
            text = kargs.pop("text")
            Frame.__init__(self, parent)
            Label(self, text=text, justify=LEFT).grid(sticky=W, column=0, row=0)
            Entry(self, *args, **kargs).grid(sticky=E, column=1, row=0)
    
    class User_Input:
        def __init__(self, parent, fields):
    
            GUIFrame = Frame(parent)
            GUIFrame.pack(expand=True, anchor=NW)
    
            field_index = 1
            for field in fields:
                self.field = LabeledEntry(GUIFrame, text=field)
                self.field.grid(column=0, row=field_index, pady=1)
                self.field.grid_columnconfigure(index = 0, minsize = 150)
                field_index += 1
            CheckVar1 = IntVar()
            self.C1 = Checkbutton(parent, text = "checkbox1", variable = CheckVar1, onvalue = 1, offvalue = 0)
            self.C1.pack(anchor = W)
    
    
    fields = ['Entry Box 1:', 'Entry Box 2']
    
    
    root = Tk()
    MainFrame = User_Input(root, fields)
    root.mainloop()
    

    Reference

    【讨论】:

    • 更具体地说,他在parent的同一框架内使用了pack()grid()GUIFrameC1 都需要使用相同的布局管理器。
    【解决方案2】:

    尝试使用 Frame 和根目录创建它,因此将 self.C1 = Checkbutton(parent, ... 替换为 self.C1 = Checkbutton(GUIFrame, ...

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多