2017-06-09 3 views
0

Ich bin relativ neu zu Python und Tkinter, aber angesichts der kleinen Beispielcode unten, warum das Label "Hallo ???" Überlappen Sie die Notebook-Tabs, die angeblich ihre Eltern sind.PYTHON3: Etikett überlappt Tabs in Notebook

Meine Annahme ist, dass das Notebook, das das Elternteil des Etiketts ist, Zeile 0 und Spalte 0 (des enthaltenden Rahmens) die obere linke des Notizbuchkörpers selbst sein würde, aber es scheint nicht das Elternteil zu sein Stattdessen scheint self.root der Elternteil zu sein. TROTZDEM das Notizbuch das Objekt ist, das als Eltern übergeben wurde.

Setzen Sie die Beschriftungsrastereigenschaften auf row = 1, column = 0 löst (in meinem Verständnis zu Recht) das Problem nicht, da in Zeile 0 nichts enthalten ist und somit nichts zusammenbricht. Das Setzen der Notiz auf Zeile = 1, Spalte = 0 scheint auch aus den gleichen Gründen nichts zu tun. Auch wird der Seitenrahmen nicht auf Zeile = 1, Spalte = 0 festgelegt.

Jede Hilfe würde sehr geschätzt werden.

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:

#!/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 

Antwort

2

Alles in einem Page auf der Seite liegen. Sie erstellen self.root im übergeordneten Element. So wurden diese Klassen nicht entwickelt. Ändern Sie diese Zeile:

self.root = Frame(self) 

Obwohl, ich habe kein Bedürfnis nach self.root seit self sehen ist bereits ein Frame.

+0

Es tut mir leid, ich bin noch ziemlich neu in Python, können Sie ein wenig auf die "Das ist nicht wie diese Klassen entworfen wurden zu arbeiten". Ich habe upvoted und gekennzeichnet als die Antwort, als das Ändern von self.root = Frame (self) in Page.py das Problem behob (auch, self.root insgesamt zu entfernen und nur self ALSO das Problem zu beheben) – Akidi

+0

@Akidi: This ' Die Klasse von Page wurde als vollständig eigenständige Einheit konzipiert. Wenn ein Widget im übergeordneten Objekt erstellt wird, ist es nicht mehr eigenständig. –