簡體   English   中英

Tkinter-列跨度似乎不影響消息

[英]Tkinter - columnspan doesn't seem to affect Message

我正在嘗試使用Tkinter在Python(2.7)中創建一個簡單的界面,在第一行提供一個用戶輸入框,瀏覽按鈕和說明,並在下一行提供跨越其寬度的多行說明。

我的問題是, columnspan選項似乎不允許我的Message小部件跨越上面三列的寬度,如下所示:

非跨區消息框

如何獲得此Message以覆蓋整個寬度? 我還嘗試使用width參數,但這似乎與Entry小部件的比例不同。

我的代碼如下:

from Tkinter import *

class App(Frame):

    def __init__(self, *args, **kwargs):
        Frame.__init__(self, *args, **kwargs)
        self.grid(sticky=N + W + E + S)

        # set up labels and buttons
        self.folder_text = Label(
            self, text='Select Folder:  ', font='Arial 10', anchor=W
        )
        self.folder_text.grid(row=0, column=0, sticky=W)

        self.input_folder = Entry(
            self, width=40, font='Arial 10'
        )
        self.input_folder.grid(row=0, column=1)

        self.browse_button = Button(
            self, text="Browse", font='Arial 8 bold',
            command=lambda: self.browse_for_folder(self.input_folder)
        )
        self.browse_button.grid(row=0, column=2)

        self.desc = Message(
            self, text='This tool will create a .csv file in the specified folder containing the Time and '
                       'Latitude/Longitude (WGS84) for all TIFF, RAW and JPEG/JPG files contained in the '
                       'folder with this information available.', font='Arial 8', anchor=W
        )
        self.desc.grid(row=1, column=0, columnspan=3, sticky=E + W)

        self.run_button = Button(
            self, text="Run!", font='Arial 10 bold', fg='red',
            command=lambda: self.run(self.input_folder)
        )

        self.run_button.grid(row=2, column=1)

# ---SNIP---

root = Tk()
root.bind('<Escape>', lambda e: root.destroy())
root.resizable(0, 0)
root.title('Get photo geolocations')

app = App(root)
root.mainloop()

Message使用寬高比或字符寬度來確定其大小。

您可以給它一個寬度,然后它將起作用:

    self.desc = Message(
        self, text='This tool will create a .csv file in the specified folder containing the Time and '
                   'Latitude/Longitude (WGS84) for all TIFF, RAW and JPEG/JPG files contained in the '
                   'folder with this information available.', font='Arial 8', anchor=W, width = 400
    )

在此處輸入圖片說明

或者,您可以渲染窗口,使用root.geometry()讀出其寬度,在小部件上設置寬度,然后在其中設置文本。

如果更改窗口小部件的背景顏色,將會看到它確實跨了多列。

Message小部件的主要功能是它將在文本中插入換行符,以便在未指定寬度的情況下文本保持特定的寬高比。 如果使窗口小部件的寬度大於其自然尺寸,則“ Message窗口的文本將不會填充額外的水平空間。

如果指定寬度,則忽略寬高比。 與“ Label中的寬度是指字符數不同,“ Messagewidth選項是基於像素的(或距離:英寸,厘米,毫米或打印機點)。

使用width選項的一種簡單方法是綁定到窗口小部件的<Configure>事件,並將width選項設置為窗口小部件的實際寬度(或將寬度減去一點作為空白)。

例如:

self.desc.bind("<Configure>", 
    lambda event: event.widget.configure(width=event.width-8))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM