我正在嘗試將三個條目彼此相鄰放置 MM、TT 和 CVC,這是一個專案。但是我可以達到這個結果,我嘗試過使用sticky 和columnspan,但根據我自己的理解,這些都行不通。任何解決方案都會有所幫助
目前我有:
from tkinter import *
Master = Tk(); Master.attributes("-fullscreen", True)
Page = Frame(Master)
Page.place(relx = 0.5, rely = 0.5, anchor = "center")
CradnumberEntry = Entry(Page)
CradnumberEntry.insert(0, "Card number")
CradnumberEntry.config(width = int(2 * CradnumberEntry.cget("width")))
CradnumberEntry.grid(row = 0, column = 0)
MMEntry = Entry(Page)
MMEntry.insert(0, "MM")
MMEntry.grid(row = 1, column = 0, sticky = "w")
MMEntry.config(width = int(1 / 4 * MMEntry.cget("width")))
YYEntry = Entry(Page)
YYEntry.insert(0, "YY")
YYEntry.grid(row = 1, column = 1, sticky = "w")
YYEntry.config(width = int(1 / 4 * YYEntry.cget("width")))
CVCEntry = Entry(Page)
CVCEntry.insert(0, "CVC")
CVCEntry.grid(row = 1, column = 2, sticky = "w")
CVCEntry.config(width = int(1 / 4 * CVCEntry.cget("width")))
uj5u.com熱心網友回復:
最簡單的做法可能是將所有這些條目打包在一個包含的Frame小部件中
cc_frame = Frame(Page) # create a container
cc_frame.grid(row=1, column=0)
MMEntry = Entry(cc_frame) # use 'cc_frame' as this widget's parent
MMEntry.insert(0, "MM")
MMEntry.pack(expand=False, fill='none')
MMEntry.config(width = int(1 / 4 * MMEntry.cget("width")))
YYEntry = Entry(cc_frame) # use 'cc_frame' as this widget's parent
YYEntry.insert(0, "YY")
YYEntry.pack(expand=False, fill='none')
YYEntry.config(width = int(1 / 4 * YYEntry.cget("width")))
CVCEntry = Entry(cc_frame) # use 'cc_frame' as this widget's parent
CVCEntry.insert(0, "CVC")
CVCEntry.pack(expand=False, fill='none')
CVCEntry.config(width = int(1 / 4 * CVCEntry.cget("width")))
CapitalLetters順便說一句,您應該避免在 Python 中使用變數名。這種語法通常是為類名保留的(比如Entry和Frame例如)。相反,您應該使用snake_case
uj5u.com熱心網友回復:
這個特定布局問題的一個非常簡單的解決方案是將您的 GUI 概念化為四列。第一列包含“MM”,接下來是“YY”,第三列是“CVC”,第四列是占用所有多余的空間。然后,確保“卡號”欄位跨越所有四列。
為此,需要更改一行代碼,并添加一行:
CradnumberEntry.grid(row = 0, column = 0, columnspan=4)
Page.grid_columnconfigure(3, weight=1)
另一個非常常見的解決方案是將第二行上的小部件放入一個框架中。“卡號”條目位于頂部,另一個框架位于其下方。然后,您可以使用pack將“MM”、“YY”和“CVC”條目放在此底部框架的左側。
second_row = Frame(Page)
second_row.grid(row = 1, column = 0, sticky="ew")
這也要求其他小部件的父級是第二幀:
MMEntry = Entry(second_row)
YYEntry = Entry(second_row)
CVCEntry = Entry(second_row)
uj5u.com熱心網友回復:
MMEntry = Entry(Page)
MMEntry.insert(0, "MM")
MMEntry.grid(row = 1, column = 0, sticky = "w")
MMEntry.config(width = int(1 / 4 * MMEntry.cget("width")))
YYEntry = Entry(Page)
YYEntry.insert(0, "YY")
YYEntry.grid(row = 1, column = 0, sticky = "n")
YYEntry.config(width = int(1 / 4 * YYEntry.cget("width")))
CVCEntry = Entry(Page)
CVCEntry.insert(0, "CVC")
CVCEntry.grid(row = 1, column = 0, sticky = "e")
CVCEntry.config(width = int(1 / 4 * CVCEntry.cget("width")))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518302.html
