Wie wollen Sie die position eines Rasters mit Tkinter?
Ist es sogar möglich, die absolute position eines Rasters innerhalb Tkinter? Ich bin versucht, erstellen Sie ein GUI, das aussieht, wie das unten, aber ich bin wahrscheinlich gehen über es der falsche Weg. Also, wenn es möglich ist, wie legen Sie die grid-position?
Ziel GUI:
Dies ist, wie meine GUI sich, so weit:
Wie Sie sehen können, meine Neue Kontakt muss auf der rechten Seite, während der Kontakt-Liste auf der linken Seite. Ich verstehe, wie Sie die Kontaktliste anhand der absoluten Werte, aber kann ich das gleiche tun für meine grid-Elemente? Oder sollte ich absolute Werte, die mit allen von Ihnen, in Kombination mit Polsterung?
Derzeit, das ist mein code:
from tkinter import *
contacts=['Justin Day']
class Contact_manager (Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title("Contact Manager")
self.pack(fill=BOTH, expand=1)
#New contact grid
Label (self, text = "New Contact").grid (row=0, columnspan=2)
Label (self, text = "First Name:").grid (row=1, sticky=E)
Label (self, text = "Last Name:").grid (row=2, sticky=E)
Label (self, text = "Phone#").grid (row=3, sticky=E)
self.entry1 = Entry(self)
self.entry2 = Entry(self)
self.entry3 = Entry(self)
self.entry1.grid (row=1, column=1)
self.entry2.grid (row=2, column=1)
self.entry3.grid (row=3, column=1)
friend_check = IntVar()
self.friend_check = Checkbutton (self, variable = friend_check,
command = self.friend_box,
text = "Friend")
self.friend_check.grid (row=4, columnspan=2)
Label (self, text = "Email:").grid (row=5, sticky=E)
Label (self, text = "Birthday:").grid (row=6, sticky=E)
self.entry4 = Entry(self)
self.entry5 = Entry(self)
self.entry4.grid (row=5, column=1)
self.entry5.grid (row=6, column=1)
#Contact listbox
Label (self, text = "Contact List").place(x=20, y=190)
contact_lb = Listbox(self)
for i in contacts:
contact_lb.insert(END, i)
contact_lb.bind("<<ListboxSelect>>", self.onSelect)
contact_lb.place(x=20, y=210)
def onSelect(self, val):
sender = val.widget
idk = sender.curselection()
value = sender.get(idx)
self.var.set(value)
def friend_box():
if friend_check.get() == 1:
contacts.append(Friend(f, l, p, e, bd))
else:
contacts.append(Person(f, l, p))
def main():
root = Tk()
ex = Contact_manager(root)
root.geometry('600x700+200+100')
root.mainloop()
if __name__ == '__main__':
main()
InformationsquelleAutor Justin Day | 2013-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie einen divide-and-conquer-Ansatz auf das auslegen von widgets in einer grafischen Benutzeroberfläche. Versuchen Sie nicht, alles auf einmal zu tun oder verwenden Sie einen geometrie-manager zu koordinieren und alles in einem Fenster. Werden methodische und Wagen Sie ein kleines problem zu einem Zeitpunkt.
Beispielsweise in der Ziel-GUI-es scheint, Sie haben vier Abschnitte: die Kontakt-Liste mit einem Suchfeld und button, einem neuen Kontaktformular, und etwas in der rechten unteren Ecke (such-Ergebnisse?). Wenn ich richtig bin, das sind vier verschiedene Bereiche, starten Sie durch die Schaffung von vier frames. Verwenden Sie raster, die Sie in den vier Ecken des Hauptfensters. Geben Sie jedem frame einen eindeutigen Farbe (für debugging-Zwecke). Nun, hantieren mit Optionen, bis diese vier Bereiche wachsen und schrumpfen in der Weise, dass Sie wollen. Stellen Sie sicher, Sie geben die Zeilen und Spalten Gewicht, so dass Sie alle in der korrekten Größe angezeigt.
Nun, dass Sie das getan haben, haben Sie vier kleinere, überschaubare layout-Probleme. Nun, es könnte sein, dass ich falsch Liege-vielleicht haben Sie zwei Bereiche, Links und rechts. Oder vielleicht haben Sie drei Links, und dann die Obere und die untere Rechte. Jetzt werden wir davon ausgehen, dass ich Recht habe, aber die Technik bleibt die gleiche, unabhängig.
Sieht es aus wie Sie haben bereits das layout für die Kontakt-Formular, so verschieben Sie diese in den oberen rechten frame. Stellen Sie sicher, dass Sie alle erweitern Sie und schrumpfen Sie richtig, wenn Sie gewachsen und verkleinern Sie das Fenster (und damit Sie wachsen und schrumpfen, die mit Rahmen).
Sobald Sie dies getan haben, die Arbeit an den nächsten Abschnitt -- legen Sie die Kontakt-Liste in der oberen linken Ecke. Wieder, stellen Sie sicher, dass alles passt richtig. An diesem Punkt sollten Sie nicht haben, um sorgen über die widgets auf der rechten Seite, weil Sie bereits diejenigen aussortiert. Für diesen Abschnitt brauchen Sie nicht Gitter, die Sie verwenden können, pack, da es nur ein paar widgets, die gestapelt auf der jeweils anderen. Allerdings können Sie verwenden, je nachdem, was am meisten Sinn macht.
Weiterhin auf diese Weise, die Arbeit an den verbleibenden zwei Ecken des GUI. Werden methodische und Wagen Sie sich an kleine, unabhängige Abschnitte ein zu einer Zeit.
InformationsquelleAutor Bryan Oakley
Hier ist etwas, das sieht viel näher an das, was Sie brauchen:
Ich bin nicht sicher, ob Sie sollten mischen .grid() und .Ort(), soweit ich weiß, sollte man nicht mischen .pack() und .grid(). Trotzdem würde ich versuchen, nicht zu mischen, einer von Ihnen.
Und über die wichtigsten Frage "wie legen Sie die position des Netz', gut, nur versuchen zu zeichnen, was Sie erwarten, auf Papier, und versuchen, Sie zu unterteilen, die in Zeilen und Spalten...
InformationsquelleAutor Dominik C
Habe ich etwas ähnliches, check it out:
InformationsquelleAutor just_another_person