我有问题。我使用类动态创建按钮。每个按钮都存储在一个列表中,所以稍后我可以通过索引它们来使用它们。但是,我无法放置/显示按钮。当我创建一个按钮时,它会完美显示。当我创建另一个时,出于某种原因它出现在第一个上面。帮助解决这个问题将不胜感激。谢谢!
以下是代码:
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函数中。
答案 0 :(得分:0)
您正在创建一个类的两个不同实例。两者都有自己的局部变量。创建一个实例并使用以下内容:
import tkinter as tk
window = tk.Tk()
window.geometry('800x600')
placeX = 20
placeY = 20
bl = []
def direction(type_):
pass
class SideBar():
def __init__(self):
global window
global placeX
global placeY
global bl
self.name = []
self.placeX = placeX
self.placeY = placeY
self.bl = []
self.bl.append(self.name)
def create_folder(self, index, name):
self.name.append(name)
self.bl.append(tk.Button(window, text = self.name[-1], command = lambda: direction(self.name)))
self.bl[-1].config(height = 3, width = 6)
self.bl[-1].place(x = self.placeX, y = self.placeY)
self.placeY += 100
side_bar = SideBar()
#Documents = SideBar('Documents')
side_bar.create_folder(0, 'Computer')
side_bar.create_folder(1, 'Documents')
window.mainloop()
答案 1 :(得分:0)
你可能意味着使用类变量而不是实例属性。类变量保存在类的所有实例之间共享的数据,事实上,只要有类定义,它就可以有一个值。实例属性可以具有特定于类的单个实例的值,通常采用self.attribute
格式。
您尝试使用self.placeY
的方式符合类变量的典型用法。删除:
self.placeY = placeY
添加:
class SideBar():
...
placeY = placeY #assign global placeY's value to Sidebar.placeY
...
最后,替换:
self.placeY += 100
使用:
SideBar.placeY += 100