python - 为什么同一类的两个实例会获得相同的实例变量更改?
问题描述
我想制作一个 GUI,询问用户他想打开哪两个文件。它显示为一个条目和一个按钮(两次:每个文件一个),两者都在同一框架中,本身在根中。
因为我想要两次相同的东西,所以我定义了一个类,然后实例化了两次,只是网格位置不同。它包含一个由更新条目值的按钮调用的方法。
它可以工作,但是当我使用任何按钮选择一个文件时,它会在两个条目中写入文件路径。我希望它只写在对应于实例的条目中。
它看起来像一个类变量问题,但我的属性在实例级别,所以它应该与实例区分开来。
这是我的代码:
from tkinter import Tk, Frame, Label, Button, Entry, filedialog as fd
class Selection:
def __init__(self, master):
self.load_button = Button(master, text="...", command=self.loadFile)
self.filedir = Entry(master, text = " ")
def loadFile(self):
self.filename = fd.askopenfilename()
self.filedir.delete(0,"end")
self.filedir.insert(0, self.filename)
if __name__=='__main__':
#-------Defining the Root window
root = Tk()
root.geometry("1000x600+455+210")
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=2)
root.grid_columnconfigure(2, weight=1)
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(1, weight=1)
root.grid_rowconfigure(2, weight=1)
root.grid_rowconfigure(3, weight=1)
#-------Defining the Frame
f2 = Frame(root, bg='#D5F4E4')
f2.grid_columnconfigure(0, weight=1)
f2.grid_columnconfigure(1, weight=2)
f2.grid_columnconfigure(2, weight=1)
f2.grid_rowconfigure(0, weight=1)
f2.grid_rowconfigure(1, weight=1)
f2.grid_rowconfigure(2, weight=1)
f2.grid_rowconfigure(3, weight=1)
#-------Instantiation here (Defining the Widgets)
TexteL = Label(f2, text="Please select file L :")
TexteT = Label(f2, text="Please select file T :")
k = Selection(f2)
j = Selection(f2)
#-------Grid everything
f2.grid(row=1,column=1, sticky="nsew")
TexteL.grid(row=0,column=1)
TexteT.grid(row=2,column=1)
k.load_button.grid(row=1, column=2)
k.filedir.grid(row=1, column=1, sticky='ew')
j.load_button.grid(row=3, column=2)
j.filedir.grid(row=3, column=1, sticky='ew')
root.mainloop()
解决方案
问题是由text = " "
初始化Entry
. 该text
参数不用于设置要在 中显示的初始文本Entry
,而是设置textvariable
参数。由于它设置为相同" "
,它将引用相同的内部variable
。只需删除text = " "
将解决问题。
推荐阅读
- shell - Linux命令删除特定目录以外的目录在管道的shell脚本中失败
- android - Flutter build apk 无法在 android studio 上运行
- python - NLTK path_similarity 给出 ValueError
- yaml - 如何为 Azure 管道中的不同作业保留环境
- rust - 如何格式化这样的字符串?
- microsoft-teams - 在 Teams Flow 中使用输入更新消息 - 发布自适应卡片操作
- java - 在哪里以及如何免费部署 Java Spring Boot 应用程序?
- html - 如何让我的 gif 显示在此网格的第一行和 2 列中?
- javascript - 如何将焦点转移到extjs中的下一个/上一个选项卡
- javascript - 在 recyclerview 片段中仅显示来自 firebase 的图像文本图像未加载