tkinter 中的框架对象不对小部件进行分组
Frame object in tkinter not grouping widgets
我刚刚开始使用 tkinter
模块。我正在尝试使用我的自定义 classes 之一将不同的小部件组合成一个全新的小部件,它继承自 Frame
对象并希望垂直堆叠 4 个这样的新小部件。
每个新小部件包含 1 个 Label
、3 个 Entry
小部件和 2 个 Button
小部件(按钮小部件在 4 个新小部件中的每一个中都有不同的用途).
为了垂直排列它们,我使用了不带参数的 pack()
方法。 问题 是,我没有以垂直方式显示所有 6 个旧小部件以 'grouped' 方式放置在新小部件内,而是 'skewed' 与所有按钮 'mixed' 一起显示(首先显示包值为 'left'
的所有小部件,然后显示包值为 'right'
的小部件)。
这是我的class OperationPanel
的一部分(实际的class太大显示不出来,但是减法等其他操作存在,以及按钮的所有功能链接也存在):
class OperationPanel(Frame):
def __init__(self, app, operation):
Frame.__init__(self, app)
if operation == "addition":
Label(app, text="Addition:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_add).pack(side = RIGHT)
Button(app, text="Add!", command=self.calc_add).pack(side = RIGHT)
elif operation == "subtraction":
Label(app, text="Subtraction:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_sub).pack(side = RIGHT)
Button(app, text="Subtract!", command=self.calc_sub).pack(side = RIGHT)
elif operation == "multiplication":
Label(app, text="Multiplication:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_mul).pack(side = RIGHT)
Button(app, text="Multiply!", command=self.calc_mul).pack(side = RIGHT)
elif operation == "division":
Label(app, text="Division:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_div).pack(side = RIGHT)
Button(app, text="Divide!", command=self.calc_div).pack(side = RIGHT)
...
这是我对 pack
OperationPanel
对象的调用:
OperationPanel(app, "addition").pack()
OperationPanel(app, "subtraction").pack()
OperationPanel(app, "multiplication").pack()
OperationPanel(app, "division").pack()
这是 GUI 现在的样子:
第 1 部分:
第 2 部分:
看起来您正在创建 parent 为 app
的所有小部件。他们 parent 应该是 self
:
if operation == "addition":
Label(app, text="Addition:").pack()
self.num1 = Entry(self)
...
我刚刚开始使用 tkinter
模块。我正在尝试使用我的自定义 classes 之一将不同的小部件组合成一个全新的小部件,它继承自 Frame
对象并希望垂直堆叠 4 个这样的新小部件。
每个新小部件包含 1 个 Label
、3 个 Entry
小部件和 2 个 Button
小部件(按钮小部件在 4 个新小部件中的每一个中都有不同的用途).
为了垂直排列它们,我使用了不带参数的 pack()
方法。 问题 是,我没有以垂直方式显示所有 6 个旧小部件以 'grouped' 方式放置在新小部件内,而是 'skewed' 与所有按钮 'mixed' 一起显示(首先显示包值为 'left'
的所有小部件,然后显示包值为 'right'
的小部件)。
这是我的class OperationPanel
的一部分(实际的class太大显示不出来,但是减法等其他操作存在,以及按钮的所有功能链接也存在):
class OperationPanel(Frame):
def __init__(self, app, operation):
Frame.__init__(self, app)
if operation == "addition":
Label(app, text="Addition:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_add).pack(side = RIGHT)
Button(app, text="Add!", command=self.calc_add).pack(side = RIGHT)
elif operation == "subtraction":
Label(app, text="Subtraction:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_sub).pack(side = RIGHT)
Button(app, text="Subtract!", command=self.calc_sub).pack(side = RIGHT)
elif operation == "multiplication":
Label(app, text="Multiplication:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_mul).pack(side = RIGHT)
Button(app, text="Multiply!", command=self.calc_mul).pack(side = RIGHT)
elif operation == "division":
Label(app, text="Division:").pack()
self.num1 = Entry(app)
self.num1.pack(side = LEFT)
self.num2 = Entry(app)
self.num2.pack(side = LEFT)
self.disp = Entry(app)
self.disp.pack(side = LEFT)
Button(app, text="Reset", command=self.reset_div).pack(side = RIGHT)
Button(app, text="Divide!", command=self.calc_div).pack(side = RIGHT)
...
这是我对 pack
OperationPanel
对象的调用:
OperationPanel(app, "addition").pack()
OperationPanel(app, "subtraction").pack()
OperationPanel(app, "multiplication").pack()
OperationPanel(app, "division").pack()
这是 GUI 现在的样子:
第 1 部分:
第 2 部分:
看起来您正在创建 parent 为 app
的所有小部件。他们 parent 应该是 self
:
if operation == "addition":
Label(app, text="Addition:").pack()
self.num1 = Entry(self)
...