Я пытаюсь создать графический скелет в 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()