使用pack()时不显示按钮

时间:2015-05-20 02:10:33

标签: python python-3.x tkinter grid pack

我正在尝试创建一个GUI应用程序(刚刚开始),但我遇到了一个问题。

当我使用.pack()(我需要使用)按钮没有显示,但如果我使用.grid(),它会显示。

这是代码:

class TemperaturePlotApp(tk.Frame):

    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent)
        self.master.title("Max Temperature")
        self.button = Button(self, text="Browse", command=self.load_file,
                             width=10, *args, **kwargs)
        self.button.pack(side="left", fill="both", expand=True)

    def load_file(self):
        fname = askopenfilename(filetypes=(("Text File", "*.txt")))
        if fname:
            try:
                print("""here it comes: self.settings["template"].set(fname)""")
            except:                     # <- naked except is a bad idea
                showerror("Open Source File", "Failed to read file\n'%s'" % fname)

            return

def main():
    root = tk.Tk()
    app = TemperaturePlotApp(root)
    root.geometry("800x400")
    root.mainloop()

if __name__ == '__main__':
    main()

如果我使用.grid(),它可以工作:

self.master.rowconfigure(5, weight=1)
self.master.columnconfigure(5, weight=1)
self.grid(sticky=W+E+N+S)

self.button = Button(self, text="Browse", command=self.load_file, width=10)
self.button.grid(row=1, column=0, sticky=W)

我必须使用.pack(),而不是网格,所以如果有人可以解释我做错了什么,我会非常感激。

由于 科里

1 个答案:

答案 0 :(得分:1)

您的主要问题是您不是打包您的TemperaturePlotApp小部件(源自Frame)。请尝试以下代码:

...
app = TemperaturePlotApp(root)
app.pack()
...

另请注意,您可能按以下方式导入tkinter:

import tkinter as tk

因为您使用以下内容从Frame小部件继承:

class TemperaturePlotApp(tk.Frame):

另一方面,您正尝试使用以下方法创建按钮:

self.button = Button(...)

这意味着要么您正在使用其他库中的其他按钮(例如ttk),要么您遇到冲突或类似情况。你可能想要它:

self.button = tk.Button(...)