2015-05-20 34 views
0

我想創建一個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

你的主要問題是,你是不是包裝TemperaturePlotApp部件(其從Frame派生)。試試下面的代碼:

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

還要注意,你可能導入Tkinter的下列方式:

class TemperaturePlotApp(tk.Frame): 

在:

import tkinter as tk 

因爲你是從Frame部件使用繼承另一方面,您正嘗試使用以下命令創建按鈕:

self.button = Button(...) 

這意味着要麼使用另一個庫中的另一個按鈕(例如ttk),要麼存在衝突或類似情況。你可能想要它像:

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

嘿,謝謝堆。非常感謝。問題是我不允許更改main()方法中或下面的代碼,因爲我正在爲大學做這個。他們也堅持我使用.pack而不是.grid。你知道有什麼辦法嗎?謝謝:) – Fishingfon

+0

@Fishingfon然後你可以直接在構造器('__init__'方法)中打包你的小部件作爲最後的聲明。例如:'self.pack()'。 – nbro

+0

太完美了!謝謝堆:) – Fishingfon