Próbuję zbudować podstawowy GUI za pomocą ttk/Tkinter.Python i ttk Używanie labelFrames do czyszczenia ramki
mam wykreślane podstawową GUI, który ma prawo podstawowe składniki, ale gdy próbuję i upiększać go/ją przestrzeń, mam osiągnąć mój limit coraz pojemników TTK grać ładnie ...
Przykłady:
from Tkinter import *
import ttk
class MakeGUI(object):
def __init__(self,root):
self.root = root
self.root.title("Text Comparitor")
## build frame
self.mainframe = ttk.Frame(self.root, padding="3 3 12 12")
self.mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
self.mainframe.columnconfigure(0, weight=1)
self.mainframe.rowconfigure(0, weight=1)
self.mainframe.pack()
## text labels
ttk.Label(self.mainframe, text="Conversion Truth Tester", font=("Helvetica", 32)).grid(column=1, row=1, sticky=E)
self.mainframe.pack(side="bottom", fill=BOTH, expand=True)
self.mainframe.grid()
ttk.Label(self.mainframe, text="Source Filename:").grid(column=1, row=2, sticky=W)
ttk.Label(self.mainframe, text="Source Text:").grid(column=1, row=3, sticky=W)
ttk.Label(self.mainframe, text="Converted Text:").grid(column=1, row=4, sticky=W)
ttk.Label(self.mainframe, text="Cleaned Source:").grid(column=1, row=5, sticky=W)
ttk.Label(self.mainframe, text="Cleaned Converted:").grid(column=1, row=6, sticky=W)
ttk.Label(self.mainframe, text="Details:").grid(column=1, row=7, sticky=W)
## buttons
self.close = ttk.Button(self.mainframe, text="Close",command=self.closeFrame).grid(column=1, row=9, sticky=SE)
self.next = ttk.Button(self.mainframe, text="Next",command=self.nextPara).grid(column=1, row=9, sticky=S)
self.next = ttk.Button(self.mainframe, text="Prev",command=self.prevPara).grid(column=1, row=9, sticky=SW)
def closeFrame(self):
self.root.destroy()
def nextPara(self):
pass
def prevPara(self):
pass
def main():
root = Tk()
makeGUI = MakeGUI(root)
root.mainloop()
if __name__ == '__main__':
main()
skutkiem czego jest:
Próbowałem dodać 2nd obiekt kontenera, ramkę etykiet do przechowywania przedmiotów etykietę tekstową, co powoduje przycisków Poruszając się dalej w górę (więc zakładam, że nie odwołuję się do labelf Rame do prawidłowo siatki:
from Tkinter import *
import ttk
class MakeGUI(object):
def __init__(self,root):
self.root = root
self.root.title("Text Comparitor")
## build frame
self.mainframe = ttk.Frame(self.root, padding="3 3 12 12")
self.mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
self.mainframe.columnconfigure(0, weight=1)
self.mainframe.rowconfigure(0, weight=1)
self.mainframe.pack()
## text labels
ttk.Label(self.mainframe, text="Conversion Truth Tester", font=("Helvetica", 32)).grid(column=1, row=1, sticky=E)
self.lfdata = ttk.Labelframe(self.root, labelwidget=self.mainframe, text='Label')#
self.lfdata.grid()
ttk.Label(self.lfdata, text="Source Filename:").grid(column=1, row=2, sticky=W)
ttk.Label(self.lfdata, text="Source Text:").grid(column=1, row=3, sticky=W)
ttk.Label(self.lfdata, text="Converted Text:").grid(column=1, row=4, sticky=W)
ttk.Label(self.lfdata, text="Cleaned Source:").grid(column=1, row=5, sticky=W)
ttk.Label(self.lfdata, text="Cleaned Converted:").grid(column=1, row=6, sticky=W)
ttk.Label(self.lfdata, text="Details:").grid(column=1, row=7, sticky=W)
## buttons
self.close = ttk.Button(self.mainframe, text="Close",command=self.closeFrame).grid(column=1, row=9, sticky=SE)
self.next = ttk.Button(self.mainframe, text="Next",command=self.nextPara).grid(column=1, row=9, sticky=S)
self.next = ttk.Button(self.mainframe, text="Prev",command=self.prevPara).grid(column=1, row=9, sticky=SW)
def closeFrame(self):
self.root.destroy()
def nextPara(self):
pass
def prevPara(self):
pass
def main():
root = Tk()
makeGUI = MakeGUI(root)
root.mainloop()
if __name__ == '__main__':
main()
co skutkuje: Uwaga swapu stanowisk między przyciskami etykiet abd, a po prostu o widocznych aspektach labelframe.
Staram się, aby druga wersja wyglądała jak ładniejsza wersja 1-sza.
Wszelkie wskazówki - czytałem różne zasoby/dokumenty i nie mogę znaleźć niczego, co pasowałoby do mojego przykładu (najprawdopodobniej - robię coś głupiego ...) i nic, co próbowałem nie ma pracował jeszcze - w tym pack()
, grid()
i inne fragmenty, które znalazłem w innych pokrewnych przykładach.
lepiej nie korzystać z sieci i spakować w jednym oknie. Wolę siatkę. Myślę też, że zmienne przycisku (z domyślną siatką) nie przechowują tego, czego oczekujesz. Siatka nie zwraca odniesienia do obiektu, o ile pamiętam. – Gonzo
Widgety @Phelix _Tkinter_ mogą korzystać z różnych menedżerów geometrii w tym samym oknie **, o ile nie mają tego samego rodzica **. _pack_ może dokonać pewnych rzeczy z mniejszym kodem; więc nie polecam używania tylko _grid_. –