2016-07-23 11 views
0

Hier ist mein Problem:
Ich habe eine labelframe (ich auch in einem klassischen Etikett getestet), die einige Tasten mit einer linken Ausrichtung für die "-Seite" -Option enthält.Zeilensprung für Tasten

Diese Buttons werden von einer Schleife erzeugt und ich möchte dem Label eine "WrapLength" hinzufügen, damit meine Buttons eine Zeile überspringen können, anstatt einander Seite an Seite zu folgen.

Die Schleife & Tasten-Code:

with open('data.txt', 'r') as data: 
    for line in data: 
     line = line.rstrip('\n') 
     status = CheckStatus(line) 
     NewButton = Button(labelframe, state = status, text = line, command = lambda x=line:run(str(x))) 
     NewButton.pack(side = LEFT, padx = 5, pady = 5) 

Der Rahmen, die die Schleife enthält:

labelframe = LabelFrame(Window, width = 400, height = 150) 
labelframe.pack() 
labelframe.pack_propagate(False) #I Try this to fix the size of the labelframe. 
+1

Wenn Sie sie in einer Spalte haben wollen, verwenden Sie einfach 'side = 'top'' und sie werden von oben nach unten Unterseite. –

+0

@BryanOakley Ich weiß, aber ich möchte, dass meine Tasten in Zeile ** S ** erscheint. Mit anderen Worten, wenn das Etikett eine bestimmte Breite erreicht, wird eine neue Zeile erstellt. – TeeVy

+0

Oh, also wollen Sie sie in einer Reihe, aber wenn sie die Kante treffen, wollen Sie, dass sie sich wickeln? –

Antwort

0

Okay, so schließlich fügte ich eine inkrementale Variable & eine if in meiner Schleife. Wenn die Variable gleich 5 ist, wird ein neuer Rahmen (der die Schaltflächen enthält) erstellt. Nicht sicher, ob es die am meisten optimierte Methode ist, aber ich habe nichts anderes gefunden ...

def LoadButtons(): 
FrameInfoText.config(justify = CENTER, text = 'Initialization...') 
FrameInfoText.update() 
LineFrame = Frame(labelframe) 
LineFrame.pack() 
ButtonsPerLine = 0 
with open('data.txt', 'r') as data: 
    for line in data: 
     line = line.rstrip('\n') 
     StreamPerLine += 1 
     if ButtonsPerLine > 5: 
      LineFrame = Frame(labelframe) 
      LineFrame.pack() 
      ButtonsPerLine = 1 
     status = CheckStatus(line) 
     NewButton = Button(LineFrame, state = status, text = line, command = lambda x=line:run(str(x))) 
     NewButton.pack(side = LEFT, padx = 5, pady = 5) 
     FrameInfoText.config(text = 'Loading...\n'+line) 
     FrameInfoText.update() 
Verwandte Themen