2017-06-09 64 views
0

我對python和tkinter相當陌生,但給出下面的小示例代碼爲什麼標籤「Hello ???」重疊被認爲是其父母的筆記本標籤。PYTHON3:標籤與筆記本中的標籤重疊

我的假設是筆記本電腦是標籤的父母會導致行0和列0(包含Frame)成爲筆記本主體本身的左上角,但它似乎不是父母,而不是self.root似乎是作爲父對象傳遞的對象的父DESPITE筆記本。

將標籤網格屬性設置爲row = 1,column = 0沒有(根據我的理解)正確地解決了問題,因爲0行沒有任何內容,因此摺疊爲無。爲行= 1,列= 0設置註釋似乎也不會做任何事情,同樣的原因。也沒有設置頁框爲行= 1,列= 0。

任何幫助將不勝感激。

App.py:

#!/usr/bin/env python 

from tkinter import Tk; 
from tkinter.ttk import Frame, Notebook; 
from page import Page; 

class Application(Frame): 
    def __init__(self, parent): 
     super().__init__(parent); 
     self.root = parent; 
     self.root.geometry("450x450+500+500"); 
     self.root.rowconfigure(0, weight=1); 
     self.root.columnconfigure(0, weight=1); 
     self.root.grid(); 

     note = Notebook(self.root); 

     page = Page(note, "pageOne"); 

     note.add(page, text="Page One"); 

     note.grid(sticky="NSEW"); #r=0, c=0 of main window 


def main(): 
    root = Tk(); 
    Application(root); 
    root.mainloop(); 

if __name__ == '__main__': 
    main(); 

Page.py:在Page

#!/usr/bin/env python 

from tkinter.ttk import Frame, Label; 

class Page(Frame): 
    def __init__(self, parent, name): 
     super().__init__(parent); 
     self.root = Frame(parent); 
     self.name = name; 
     self.root.grid(); #r=0, c=0 of notebook interior? 

     Label(self.root, text="Hello???").grid(); #r=0, c=0 also of notebook interior frame 

回答

2

一切必須在頁面中。您正在創建父親中的self.root。這不是這些課程如何設計的。更改該行:

self.root = Frame(self) 

雖然,我不認爲有必要self.root因爲self已經是一個Frame

+0

對不起,我對Python還很陌生,你能否詳細說一下「這不是這些類被設計成如何工作的」。我已upvoted和標記爲答案,因爲改變self.root = Frame(self)在Page.py修復了這個問題(同時,完全刪除self.root,只是使用自己也解決了這個問題) – Akidi

+0

@Akidi:這個'課程設計是充當一個完全獨立的單元。當它在父級創建一個小部件時,它不再是獨立的。 –