Tkinter OOP - Создание нескольких кадров из унаследованного класса - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь создать графический скелет в tkinter для простого анализа данных.У меня не слишком много опыта с ООП-подходом к созданию GUI, но я следовал советам, обсуждаемым в этой теме: Лучший способ структурировать приложение tkinter?

Я хочуиметь класс, который наследуется от tk.Frame и который в конечном итоге будет содержать граф pyplot (хотя кажется, что для этого мне нужно переключиться на холст или добавить холст в каждом кадре).Я реализовал структуру того, что я хочу сделать, но, несмотря на назначение размера и использование .place (), полученные окна расположены в (0, 0) и имеют размеры 1x1.Однако иерархия виджетов точно соответствует ожидаемой, и это хорошо.

Возможно, я немного заблудился в аргументах self / self.master / master, но кто-нибудь может указать на недостатки в моем подходе?

class DataWindow(tk.Frame):
    _ids = count(0)
    def __init__(self, master, *args, **kwargs):
        self.id = next(self._ids)
        self.master = master

        self.height = self.master.winfo_height()
        self.height = (self.height-50)/3
        self.width = self.master.winfo_width()
        self.width = (self.width-100)/3

        tk.Frame.__init__(self, self.master, height = self.height, width = self.width, bd = 2)
        label = tk.Label(self, text = "File" + str(self.id))

class NestedMenu(tk.Menu):
    pass

class MenuBar(tk.Menu):
    pass

class MainApplication(tk.Frame):
    def __init__(self, master, *args, **kwargs):

        self.workdirectory = os.getcwd()
        tk.Frame.__init__(self, master, height = 750, width = 1500)
        self.master = master

        #Create the rest of the GUI

        # Main menubar
        self.TopMenu = MenuBar(self.master)

        self.filemenu = NestedMenu(self.TopMenu, tearoff = 0)
        self.filemenu.add_command(label = "Open", command = self.openfiles)
        self.filemenu.add_command(label = "Save", command = self.savefiles)

        self.TopMenu.add_cascade(label = "File", menu = self.filemenu)


        self.master.config(menu=self.TopMenu)
        self.pack(side="top", fill="both", expand=True)

    def openfiles(self):
        # Select filepaths from dialog box
        filepaths = filedialog.askopenfilenames(initialdir = self.workdirectory,title = "Select file",filetypes = (("WAV Files", ".wav"),("All Files","*.*")))

        # Create Data window per file 
        for file in filepaths:
            self.newgraph = DataWindow(self)
            self.newgraph.place(relx = .5, rely = self.newgraph.id*.1, anchor = "center")

    def savefiles(self):
        pass

if __name__ == "__main__":
    root = tk.Tk()
    MainApplication(root)#.pack(side="top", fill="both", expand=True)
    root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...