![](/img/trans.png)
[英]Tkinter - Using a Button command in a class to call a function from another class
[英]Using tkinter button command from other class
我想在同一窗口中選擇更多目錄。 為了選擇目錄,我准備了SelectDir
類。 該目的我從類調用Gui
(通過使用SelectDir
。 OpenDirWnd()
現在,我不能從類中獲得目錄的名稱SelectDir
為tk.Entry
類Gui
。
import tkinter as tk
from tkinter.filedialog import askdirectory
class SelectDir():
def __init__(self,master, title,dirInit):
self.dir_opt = options = {}
self.dirInit = dirInit
options['parent'] = master
options['title'] = title
options['initialdir'] = self.dirInit
self.master = master
self.dirSelect = tk.StringVar()
self.dirSelect.set(self.dirInit)
def OpenDirWnd(self):
self.master.grab_set()
self.dirSelect = askdirectory(**self.dir_opt)
if self.dirSelect == "":
self.dirSelect.set(self.dirInit)
def NameSelectDir(self):
return self.dirSelect
class Gui(tk.Frame):
def __init__(self,master):
tk.Frame.__init__(self, master)
frMaster = tk.Frame(master)
seldir = SelectDir(master, " Select directory",
"D:\\MyPgm\\Python\\Tiles_8")
button = tk.Button(frMaster,text=">>>",command = seldir.OpenDirWnd )
frMaster.place(relx=0.04, rely=0.35)
button.grid(column = 0, row=0)
self.actDir = tk.StringVar()
self.actDir.set("D:\\MyPgm\\Python\\Tiles_8")
entry= tk.Entry(frMaster,textvariable = self.actDir,width = 30)
entry.grid(column = 0, row=1)
wndRoot = tk.Tk()
appapp = Gui(master=wndRoot)
appapp.mainloop()
您應該在Gui
創建函數並分配給按鈕-此函數應使用SelectDir
顯示窗口,然后從SelectDir
獲取信息並Entry
順便說一句:我更改了一些代碼(即名稱,因為我們更喜歡函數/方法和變量的小寫字母名稱以及類的CamelCase名稱。更多信息: PEP 8-Python代碼樣式指南 )
import tkinter as tk
from tkinter.filedialog import askdirectory
# --- classes ---
class SelectDir():
def __init__(self, master, title, initial):
self.master = master
self.initial = initial
self.selected = initial
self.options = {
'parent': master,
'title': title,
'initialdir': initial,
}
def show(self):
result = askdirectory(**self.options)
if result:
self.selected = result
#self.options['initialdir'] = result
# or
#return self.selected
def get(self):
return self.selected
class Gui(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
frame = tk.Frame(master)
frame.pack()
self.seldir = SelectDir(self, "Select directory", "D:\\MyPgm\\Python\\Tiles_8")
button = tk.Button(frame, text=">>>", command=self.select_dir)
button.grid(column=0, row=0)
self.act_dir = tk.StringVar()
self.act_dir.set("D:\\MyPgm\\Python\\Tiles_8")
entry = tk.Entry(frame, textvariable=self.act_dir, width=30)
entry.grid(column=0, row=1)
def select_dir(self):
self.seldir.show()
self.act_dir.set(self.seldir.get())
# or
#result = seldir.show()
#self.act_dir.set(result)
# --- main ---
root = tk.Tk()
app = Gui(root)
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.