2016-04-02 6 views
0

Running Python 3.4.2 und Tkinter 8.6 auf einem Raspberry Pi. Ich möchte ein Text-Widget erstellen, das einen Frame fester Größe mit dem Rasterlayout-Manager füllt.Python tkinter Text-Widget füllen Sie feste Größe Rahmen mit Raster

Wenn Sie den Code unten laufen, sehen Sie den Text-Widget nicht den 800x600 Rahmen füllt. Mir ist klar, dass ich die Attribute width und height des Texts so einstellen könnte, dass sie den Frame füllen, aber das würde nur die Standardschriftart funktionieren und würde den Frame nicht genau ausfüllen.

from tkinter import * 

class Test(Tk): 
    def __init__(self): 
    super().__init__() 
    self.text = frameText(self) 
    self.geometry('{}x{}'.format(800, 600)) 

def frameText(frame, **kw): 
    ysb = Scrollbar(frame) 
    xsb = Scrollbar(frame, orient = HORIZONTAL) 
    text = Text(frame, **kw) 
    ysb.configure(command = text.yview) 
    xsb.configure(command = text.xview) 
    text.configure(yscrollcommand = ysb.set, xscrollcommand = xsb.set) 
    text.grid(row = 0, column = 0, sticky = N+E+S+W) 
    ysb.grid(row = 0, column = 1, sticky = N+S) 
    xsb.grid(row = 1, column = 0, sticky = E+W) 
    return text 

if __name__ == '__main__': 
    Test().mainloop() 

Antwort

1

Sie müssen das Raster konfigurieren, dass die Zeile und Spalte ein Nicht-Null-Gewicht zu geben, damit sie erweitern

from tkinter import * 

class Test(Tk): 
    def __init__(self): 
    Tk.__init__(self) 
    self.grid_columnconfigure(0, weight=1) 
    self.grid_rowconfigure(0, weight=1) 
    self.text = frameText(self) 
    self.geometry('{}x{}'.format(800, 600)) 

def frameText(frame, **kw): 
    ysb = Scrollbar(frame) 
    xsb = Scrollbar(frame, orient = HORIZONTAL) 
    text = Text(frame, **kw) 
    ysb.configure(command = text.yview) 
    xsb.configure(command = text.xview) 
    text.configure(yscrollcommand = ysb.set, xscrollcommand = xsb.set) 
    text.grid(row = 0, column = 0, sticky = N+E+S+W) 
    ysb.grid(row = 0, column = 1, sticky = "ns") 
    xsb.grid(row = 1, column = 0, sticky = E+W) 
    return text 

if __name__ == '__main__': 
    Test().mainloop() 
Verwandte Themen