Tkinter - columnspan似乎不会影响Message

时间:2016-10-13 14:17:39

标签: python tkinter

我试图在Python(2.7)中使用Tkinter创建一个简单的界面,其中包含用户输入框,第一行的浏览按钮和描述以及跨越下面一行的宽度的多行说明。

我的问题是,columnspan选项似乎不允许我的Message窗口小部件跨越上面三列的宽度,如下所示:

Non-spanning message box

如何让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()

2 个答案:

答案 0 :(得分:1)

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
    )

enter image description here

或者,您可以渲染窗口,使用root.geometry()读取宽度,在窗口小部件上设置宽度,然后将文本设置为窗口。

答案 1 :(得分:1)

如果更改窗口小部件的背景颜色,您将看到它确实跨越多个列。

Message小部件的主要功能是它会在文本中插入换行符,以便在未指定宽度时文本保持特定的宽高比。如果小部件的宽度大于其自然大小,Message窗口的文本将不会填充额外的水平空间。

如果指定宽度,则忽略宽高比。与宽度指字符数的Label不同,width的{​​{1}}选项是基于像素的(或距离:英寸,厘米,毫米或打印机点)。

使用Message选项的一种简单方法是绑定到窗口小部件的width事件,并将width选项设置为窗口小部件的实际宽度(或宽度减去一点点)为了保证金)

例如:

<Configure>