Python 绑定到条目的StringVar不';t更新输入值
我从Python和Tkinter中的GUI开始,希望创建一个小窗口,从文件中加载一个图像,显示文件的路径以及反图像。到目前为止,我已经有了选择图像的窗口和按钮(tkinter.filedialog.askopenfilename),但我正在尝试使用tkinter.StringVar更新应该显示路径的条目。StringVar的值正在更改,但条目中显示的值没有更改 帧代码:Python 绑定到条目的StringVar不';t更新输入值,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我从Python和Tkinter中的GUI开始,希望创建一个小窗口,从文件中加载一个图像,显示文件的路径以及反图像。到目前为止,我已经有了选择图像的窗口和按钮(tkinter.filedialog.askopenfilename),但我正在尝试使用tkinter.StringVar更新应该显示路径的条目。StringVar的值正在更改,但条目中显示的值没有更改 帧代码: import tkinter as tk import tkinter.filedialog as tkf class Im
import tkinter as tk
import tkinter.filedialog as tkf
class ImageViewer(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.master.title("Image Viewer")
self.drawButtons()
self.grid()
def drawButtons(self):
self.lblfilename = tk.Label(self, text="Image: ")
self.lblfilename.grid(padx=1, column=0, row=0, sticky=tk.N+tk.E+tk.S+tk.W)
self.eText = tk.StringVar()
self.eText.set("")
self.filenametext = tk.Entry(self, background='#fff', width=65, textvariable=self.eText)
self.filenametext.grid(padx=10, column=1, row=0, columnspan=2, sticky=tk.N+tk.E+tk.S+tk.W)
self.pickerbut = tk.Button(self, text="Load", command=self.picker)
self.pickerbut.grid(column=3, row=0, sticky=tk.N + tk.S + tk.W)
self.image = tk.Canvas(self, height=480, width=640)
self.image.grid(padx=10, pady=5, column=0, row=1, columnspan=4, rowspan=3)
self.cancelbut = tk.Button(self, text="Exit", command=self.cancel)
self.cancelbut.grid(column=3, row=4, sticky=tk.N + tk.W + tk.S)
def picker(self):
self.imgpicker = tkf.askopenfilename(parent=self)
self.eText.set(self.imgpicker)
print(self.eText.get())
def cancel(self):
self.master.destroy()
main:
if __name__ == "__main__":
imageviewerbutton = tk.Tk()
imageviewerbutton.geometry('660x550+100+90')
ImageViewer(imageviewerbutton)
imageviewerbutton.mainloop()
当我使用self.eText.get()打印self.eText的值时,它会显示正确的图像路径,但我的条目仍然为空
在我看来,绑定StringVar和条目时会出现任何问题,尽管我已经在互联网上搜索并尝试了我想到的一切,但我没有找到解决方案
有人能给我一个提示吗?我没有一个python3实例可以测试这个,但它在Python2.7上似乎工作正常 您是否知道不需要将
StringVar
与条目小部件一起使用?在我看来,你几乎从来都不需要。您可以获取并设置条目的值,而不使用它
例如:
self.imgpicker = tkf.askopenfilename(parent=self)
self.filenametext.delete(0, "end")
self.filenametext.insert(0, self.imgpicker)
伟大的谢谢布莱恩,这就解决了。我不知道我可以这样做。如果我想使它成为只读的,我应该在修改它之前将状态更改为正常,然后再返回到只读,还是有更好的选择?我注意到,如果不将其更改为“正常”,我将无法修改文本。@RubenBermudez:是的,更改它,然后再将其更改回去。