離開這個問題,一切正常。但是,在我自己的程式中,我打算使用多個列,一旦我這樣做,事情就變得很危險。我試圖將多個專案放在同一行中,但實際上并沒有奏效。代碼如下所示:
from tkinter import *
class Column_example(Frame):
def __init__(self):
#initializing the frame itself
Frame.__init__(self)
self.place(relx = 0.5, relwidth = 1, anchor='n')
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
#initializing some stuff
self.data_list = []
self.data = 0
#button locations
self.button = Button(self, text = "Go", command = self.go)
self.button.grid(row = 0, column = 0)
self.redo = Button(self, text = "Erase", command = self.erase)
self.redo.grid(row = 0, column = 1)
#commands
def go(self):
for self.data in range(1, 20000, 100):
self.data_list.append(self.data)
self.data = Label(self, text = self.data_list, wraplength = self.master.winfo_width(), font = 'arial 30')
self.data.grid(row = 2, column = 0, columnspan = 100)
self.data.bind('<Configure>', self.rewrap)
def erase(self):
self.data.destroy()
self.data_list.clear()
def rewrap(self, event):
self.data.config(wraplength = self.master.winfo_width())
frame01 = Column_example()
frame01.mainloop()
我知道Erase如果Go事先使用兩次會引發錯誤,但這無關緊要,因為此代碼只是我實際問題的一個示例。在添加之前self.columnconfigure(1, weight=1),Go按鈕基本上是居中的,但是Erase按鈕被推到了螢屏的最右側。添加后,它們彼此和兩側等距。現在,對于相同大小的列,這是可以預期的,而且我已經有了一個以前有效的解決方案。
通過將columnspan最大條目設定為較大的數字,然后我可以精確地放置與其相關的其他專案。在這個例子中,螢屏填充資料有columnspan = 100. 然后我可以將東西放在等于它們在螢屏上的百分比距離的列中。設定Go為第 49 列和第Erase51 列完全達到了我想要的效果,它們都靠近中心(在寫入資料之后,但在我的實際程式中,資料是在加載螢屏之前寫入的,因此看起來很正常)。但是在我這樣做后它停止了作業columnconfigure。現在將其設定為將它們都放置在螢屏的最右側。我需要columnconfigure保持動態文本換行,如我之前的問題所示,所以我想知道如何解決這個問題。一種可能的解決方案是手動配置所有 100 列,但肯定有更好的方法……或者至少有一種不需要 100 行代碼的方法。
uj5u.com熱心網友回復:
如果您希望兩個按鈕居中,那么我建議您最多使用兩列。通過uniform選項使它們具有相同的寬度,并使按鈕緊貼列的左右邊緣。
self.button.grid(row = 0, column = 0, sticky="e")
self.redo.grid(row = 0, column = 1, sticky="w")
...
def go(self):
...
self.data.grid(row = 2, column = 0, columnspan = 2, sticky="ew")
...
另一種方法是使用三列,中間列保留給按鈕。將按鈕放在框架中,然后將框架放在該列中。然后,將 0 和 2 列配置self為具有非零權重,并使長標簽跨越所有三列。最終結果是中間列將保持居中,只有兩個按鈕。
這樣做的好處是您可以向按鈕框架添加任意數量的按鈕,并且按鈕組作為一個整體將保持居中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/398955.html
