2016-09-02 5 views
0

私はこのlinkのPythonコードの例に従っています。私の最終的な目標は、データベースクエリを使用して動的なページ数を作成しようとすることです。クエリはアイテムのリストを返し、それぞれをページとしてインスタンス化する辞書エントリを作成することができます。動的ページ作成tkinter

ここでは、数字のリストだけで辞書にインスタンス化されたPageクラスを作成することで作成しようとしましたが、StartPageの表示を得ることができません。 。私のソースコード:

class SeaofBTCapp(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     container = tk.Frame(self) 

     container.pack(side="top", fill="both", expand=True) 

     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     database_pages = [1, 2, 3, 4] 

     count = 0 
     for p in database_pages: 
      page_num = p 
      frame = Page(container, self) 
      self.frames[page_num] = frame 
      frame.grid(row=0, column=0, sticky="nsew") 
      count += 1 

     self.frames[count] = StartPage(container, self) 
     self.show_frame(count) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 

class Page(tk.Frame): 
    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 

     label = tk.Label(self, text="label for Page") 
     label.pack() 

私はそれを辞書のエントリとして追加し、そのキーを呼び出そうとしました。エラーは表示されませんが、StartPageは表示されません。 StartPageを最初に表示するにはどうすればよいですか?これを達成するより良い方法はありますか?

EDIT

示唆したように、私は変更:

self.frames[count] = StartPage(container, self) 
    self.show_frame(count) 

をする:

frame = StartPage(container, self) 
    self.frames[count + 1] = frame 
    frame.grid(row=0, column=0, sticky='nsew') 
    self.show_frame(count + 1) 

助けてくれてありがとう!

答えて

0

StartPageの作成後にgridを呼び出していないため、表示されません。あなたがStartPageを作成した後、以下を追加します。

start.grid(row=0, column=0, sticky="nsew") 

をあなたはインデックス4でStartPageを入れているという問題があるが、あなたはすでにこの問題の問題に貢献していないインデックス4のフレームを持っていますが、他のページを表示しようとすると問題が発生します。

+0

ありがとうございます!うわー、私はそれをキャッチしていないと信じられない。欠落していたコマンドをクリアするには、最初のクラスの一番下にあるcontainer.pack()が必要でした。 – B3Caballero

+0

@BenC:あなたのご意見は分かりません。あなたのコードはすでにコンテナの 'pack'を呼び出しています。コードに 'pack'コマンドがありません。 –

+0

申し訳ありません、私は自分自身の前に飛び込んだ。それはcontainer.packではありませんでした。私は、forループの下のコードをグリッドへのスタートページを含めて作った。私のポストを更新しないでください。 – B3Caballero

関連する問題