簡體   English   中英

使用其他類的tkinter button命令

[英]Using tkinter button command from other class

我想在同一窗口中選擇更多目錄。 為了選擇目錄,我准備了SelectDir類。 該目的我從類調用Gui (通過使用SelectDirOpenDirWnd() 現在,我不能從類中獲得目錄的名稱SelectDirtk.EntryGui

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM