【发布时间】:2018-03-09 04:38:12
【问题描述】:
我有问题。我使用类动态创建按钮。每个按钮都存储在一个列表中,因此我以后可以通过索引它们来使用它们。不过,我在放置/显示按钮时遇到了麻烦。当我创建一个按钮时,它会完美显示。当我创建另一个时,由于某种原因,它出现在第一个之上。帮助解决这个问题将不胜感激。谢谢!
代码如下:
import tkinter as tk
window = tk.Tk()
window.geometry('800x600')
placeX = 20
placeY = 20
bl = []
def direction(type_):
pass
class SideBar():
def __init__(self, name):
global window
global placeX
global placeY
global bl
self.name = name
self.placeX = placeX
self.placeY = placeY
self.bl = bl
self.bl.append(self.name)
print(self.bl)
def create_folder(self, index):
self.bl[index] = tk.Button(window, text = self.name, command = lambda: direction(self.name))
self.bl[index].config(height = 3, width = 6)
self.bl[index].place(x = self.placeX, y = self.placeY)
self.placeY += 100
Computer = SideBar('Computer')
Documents = SideBar('Documents')
Computer.create_folder(0)
Documents.create_folder(1)
window.mainloop()
我认为问题出在 create_folder 函数的某个地方。
【问题讨论】:
-
按钮出现在同一个地方,因为这正是你告诉他们的。您创建的每个
SideBar从全局变量中获取相同的placeX/placeY值,这些值永远不会改变。self.placeY += 100行完全没有效果,因为您再也不会使用该实例变量(Computer和Documents有自己独立的副本)。 -
这就是小部件永远不应该放置自己的原因。让调用者将小部件放置在它想要的任何位置。
标签: python python-3.x python-2.7 tkinter