【发布时间】:2015-03-20 08:57:18
【问题描述】:
我刚刚开始使用tkinter 模块。我正在尝试使用我的自定义类之一将不同的小部件组合成一个全新的小部件,该类继承自 Frame 对象并希望垂直堆叠 4 个这样的新小部件。
每个新小部件都包含 1 个Label、3 个Entry 小部件和 2 个Button 小部件(按钮小部件在 4 个新小部件中的每一个中都有不同的用途)。
为了垂直排列它们,我使用了不带参数的pack() 方法。 问题 是,我没有以垂直方式显示所有 6 个旧小部件以“分组”方式放置在新小部件中,而是得到一个带有所有按钮的“倾斜”显示混合在一起(pack 值为'left' 的所有小部件首先显示,然后显示pack 值为'right' 的小部件)。
这是我的班级OperationPanel的一部分(实际班级太大而无法显示,但存在减法等其他操作,并且按钮链接到的所有功能也存在):
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 部分:
【问题讨论】:
标签: python user-interface tkinter widget