今天早上我開始開發一個小應用程式,以便更好地理解 TkInter。我沒有走得太遠,因為我按下按鈕后無法更新標簽。
似乎在我創建了一個 Label 物件的實體之后,由于 mainloop() 我猜我不能再處理它了?我嘗試使用 .update() 和其他方法來完成這項作業,但我無法弄清楚。如果我將()添加到file_explorer方法,標簽會更新,但我無法再打開檔案資源管理器,并且它還會在不按下按鈕的情況下啟動檔案資源管理器,因此毫無意義。在 StackOverflow 上找到了一些東西,但仍然沒有。
from tkinter import *
from tkinter import filedialog as fd
import os
# Main_window
App = Tk()
App.geometry("300x300")
App.resizable(0, 0)
filename = "empty"
class Btn:
def __init__(self, master, pos_x, pos_y, label):
frame = Frame(master)
frame.pack()
self.Button = Button(master, text=label, command=self.file_explorer)
self.Button.place(x=pos_x, y=pos_y)
def file_explorer(self):
global filename
filename = fd.askopenfilename(filetypes=(('text files', '*.txt'), ('All files', '*.*')))
filename = os.path.basename(filename)
class FileLabel:
def __init__(self, master, pos_x, pos_y):
global filename
frame = Frame(master)
frame.pack()
self.label1 = Label(master, text=filename)
self.label1.place(x=pos_x, y=pos_y)
e = Btn(App, 10, 10, "Browse file")
f = FileLabel(App, 90, 12)
App.mainloop()
uj5u.com熱心網友回復:
更新filename不會自動更新標簽。但是,您可以使用StringVar代替普通字串和textvariable選項Label來實作目標:
...
filename = StringVar(value="empty")
class Btn:
def __init__(self, master, pos_x, pos_y, label):
frame = Frame(master)
frame.pack()
self.Button = Button(master, text=label, command=self.file_explorer)
self.Button.place(x=pos_x, y=pos_y)
def file_explorer(self):
fname = fd.askopenfilename(filetypes=(('text files', '*.txt'), ('All files', '*.*')))
# update filename
filename.set(os.path.basename(fname))
class FileLabel:
def __init__(self, master, pos_x, pos_y):
frame = Frame(master)
frame.pack()
self.label1 = Label(master, textvariable=filename) # used textvariable instead
self.label1.place(x=pos_x, y=pos_y)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432211.html
標籤:python-3.x 班级 tkinter 标签
上一篇:在檔案夾位置Python中使用Pandas讀取所有csv檔案
下一篇:如何使用全域值列印類中的屬性?
