我从Python和Tkinter开始使用GUI,并希望创建一个小窗口,从文件中加载图像并显示文件的路径以及图像。到现在为止,我已经有了我的窗口和按钮来选择图像( tkinter.filedialog.askopenfilename ),但我正在尝试更新应该的条目使用 tkinter.StringVar 显示路径。 StringVar的值正在变化,但不会更改条目中显示的值。
框架代码:
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()
主要
if __name__ == "__main__":
imageviewerbutton = tk.Tk()
imageviewerbutton.geometry('660x550+100+90')
ImageViewer(imageviewerbutton)
imageviewerbutton.mainloop()
当我使用 self.eText.get()打印 self.eText 的值时,它会显示正确的图像路径,但我的条目仍为空。
在我看来,当绑定StringVar和Entry时出现任何问题,虽然我已经在互联网上搜索并尝试了我想到的一切,但我没有找到解决方案。
有人能给我一个暗示吗?
答案 0 :(得分:0)
我没有可以测试它的python3实例,但它似乎在python 2.7上运行正常。
您是否意识到您不需要将StringVar
与条目小部件一起使用?在我看来,你几乎不需要一个。您可以在没有它的情况下获取和设置条目的值。
例如:
self.imgpicker = tkf.askopenfilename(parent=self)
self.filenametext.delete(0, "end")
self.filenametext.insert(0, self.imgpicker)