2017-09-30 2 views
1

Ich versuche, Gitter von Widgets zu erstellen. Dieses Gitter von Widgets beginnt als Etiketten, die mir ihre Koordinaten mitteilen. Ich habe dann eine Liste von Anfangs- und Endpunkten für Schaltflächen, die sie ersetzen werden. Angenommen, ich habe eine Schaltfläche, die von (0, 0) nach (0, 2) wechselt. Ich entferne die Beschriftungen von dieser Position und platziere dort eine Schaltfläche mit der richtigen Zeilenspanne. Wenn eine Schaltfläche eine andere Schaltfläche (nicht nur eine Beschriftung) ersetzen wird, erzeuge ich einen Rahmen, dann klicke ich die Schaltfläche als eine Möglichkeit, das übergeordnete Element (das ich gelesen habe, ist keine Möglichkeit mit tkinter) zu ändern und hinzuzufügen der neue Knopf zum Rahmen auch. Der Rahmen ersetzt dann die Widgets (Beschriftungen und alte Schaltflächen) im Raster mit den Schaltflächen nebeneinander, anstatt sich zu überlappen.Gibt es eine Möglichkeit, ein tkinter Widget zu klonen?

Also diese example image zeigt ein Raster von Labels, dann wo der erste Knopf platziert ist, dann wo der zweite Knopf gehen soll, und der resultierende Rahmen mit beiden Knöpfen darin nebeneinander.

Das große Problem für mich ist, die erste Schaltfläche zu entfernen und es erneut auf dem Raster platzieren, da es nicht möglich ist, das übergeordnete Element eines Widgets zu ändern. Ich bin zwar willkommen, bessere Ideen zu bekommen, aber auch Knöpfe nebeneinander auf dem Raster zu bekommen.

+0

Sie nicht die Eltern des Widgets ändern, aber Sie können, welche ein anderes Widget innen positioniert ist Widget ändern. Wird das dein Problem lösen? Es ist wirklich nicht klar, was genau dein Problem ist. –

+0

@Bryan Oakley Wie änderst du, in welchem ​​Widget sich ein anderes Widget befindet? Im Moment fahre ich durch das Frame.grid_slaves() meines gesamten Fensters (ich erzähle das in einer Variablen mit dem Namen info) und benutze die Informationen, die von diesem zur Verfügung gestellt wurden, um die Schaltfläche neu zu erstellen. Wenn ich die richtige Information ["row"] und info ["column"] finde, erstelle ich eine neue Schaltfläche mit diesen Informationen, aber dies ist nur die Information darüber, wie diese Schaltfläche im Grid platziert wird. Nicht die Information über die Schaltfläche, wie es Text ist. – itsknob

+0

_ "Wie ändern Sie das Widget, in dem sich ein anderes Widget befindet?" _ - Die Geometrie-Manager akzeptieren alle einen 'in_'-Parameter, um anzugeben, wo das Widget platziert werden soll. Die Regel, direkt aus der Dokumentation: _ "Der Master für jeden Slave muss entweder der Elternteil des Slaves (der Standard) oder ein Nachkomme des Elternteils des Slaves sein." _ –

Antwort

1

Es gibt keine direkte Möglichkeit, ein Widget zu klonen, aber mit tkinter können Sie das übergeordnete Element eines Widgets, die Klasse eines Widgets und alle Konfigurationswerte eines Widgets bestimmen. Diese Information reicht aus, um ein Duplikat zu erstellen.

Es würde wie folgt aussehen:

def clone(widget): 
    parent = widget.nametowidget(widget.winfo_parent()) 
    cls = widget.__class__ 

    clone = cls(parent) 
    for key in widget.configure(): 
     clone.configure({key: widget.cget(key)}) 
    return clone 
Verwandte Themen