Tôi đang cố gắng xây dựng GUI cơ bản bằng ttk/Tkinter.Python & ttk Sử dụng labelFrames để làm sạch khung
Tôi có một âm mưu ra một giao diện cơ bản mà có các thành phần cơ bản đúng, nhưng khi tôi cố gắng và tô điểm nó/không gian nó ra, tôi đạt đến giới hạn của tôi nhận được container TTK để chơi độc đáo ...
Ví dụ:
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()
mà kết quả trong:
tôi đã cố gắng để thêm một đối tượng container thứ 2, một khung nhãn để giữ các đối tượng nhãn văn bản, mà kết quả trong các nút di chuyển xa hơn lên (và vì vậy tôi cho rằng tôi không tham khảo bản thân Rame vào lưới đúng:
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()
mà kết quả trong: Lưu ý hoán đổi vị trí giữa các nút abd nhãn, và chỉ là về khía cạnh nhìn thấy được của labelframe.
Tôi đang cố gắng để có được phiên bản thứ 2 để 'nhìn' như một phiên bản đẹp hơn của 1st.
Bất kỳ con trỏ nào - Tôi đã đọc xung quanh các tài nguyên/tài liệu khác nhau và không thể tìm thấy bất kỳ thứ gì phù hợp với ví dụ của tôi (rất có thể - tôi đang làm điều gì đó ngu ngốc ...) và không có gì tôi đã thử đã làm việc - bao gồm pack()
, grid()
và các đoạn trích khác mà tôi đã tìm thấy trong các ví dụ liên quan khác.
Tốt hơn là không nên sử dụng lưới và gói trong một cửa sổ. Tôi thích lưới. Ngoài ra tôi nghĩ rằng các biến nút sẽ (với lưới mặc định) không lưu trữ những gì bạn mong đợi. Lưới không trả về một tham chiếu đến đối tượng theo như tôi nhớ. – Gonzo
Các tiện ích @Phelix _Tkinter_ có thể sử dụng các trình quản lý hình học khác nhau trong cùng một cửa sổ ** miễn là chúng không chia sẻ cùng một cha mẹ **. _pack_ có thể thực hiện một số thứ nhất định với ít mã hơn; vì vậy tôi sẽ không khuyên bạn chỉ sử dụng _grid_. –