向tkinter小部件添加标签会更改整个布局

时间:2017-06-28 15:24:31

标签: python tkinter grid-layout

我正在编写一个python文本编辑器,现在我正忙于查找功能。 然后,当找到用户输入的最后一次出现时,它再次跳回到开头,并且它显示文本“从顶部找到第一次出现,已到达文件末尾”。在窗口的底部。

但是,显示此项也会更改所有其他项目的位置,您可以看到here。现在我想从 将文本添加到对话框底部后的布局开始。这是我的相关代码:

find_window = Toplevel()
find_window.geometry('338x70')
find_window.title('Find')

Label(find_window, text='Enter text to find:').grid(row=0, column=0, sticky=W)

find_text = Entry(find_window, highlightcolor='blue', highlightbackground='blue', highlightthickness=1)
find_nextbutton = Button(find_window, text='Find Next', command=find_next)
find_allbutton = Button(find_window, text='Find All')

find_text.grid(row=0, column=1, sticky=W)
find_nextbutton.grid(row=0, column=2, sticky=W)
find_allbutton.grid(row=1, column=2, sticky=W)

当发现最后一次出现时,我这样做:

file_end = Label(find_window, text='Found 1st occurance from the top, end of file has been reached.')
file_end.grid(row=2, columnspan=4, sticky=W)

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是不要将窗口强制为特定大小,并始终在那里标记。将宽度设置得足够大,以包含消息的全文。当您准备好显示值时,请使用configure方法显示文本。

以下是基于您的代码的完整示例:

from tkinter import *

root = Tk()
text = Text(root)
text.pack(fill="both", expand=True)
with open(__file__, "r") as f:
    text.insert("end", f.read())                

def find_next():
    file_end.configure(text='Found 1st occurance from the top, end of file has been reached.')

find_window = Toplevel()
#find_window.geometry('338x70')
find_window.title('Find')

Label(find_window, text='Enter text to find:').grid(row=0, column=0, sticky=W)

find_text = Entry(find_window, highlightcolor='blue', highlightbackground='blue', highlightthickness=1)
find_nextbutton = Button(find_window, text='Find Next', command=find_next)
find_allbutton = Button(find_window, text='Find All')
file_end = Label(find_window, width=50)

find_text.grid(row=0, column=1, sticky=W)
find_nextbutton.grid(row=0, column=2, sticky=W)
find_allbutton.grid(row=1, column=2, sticky=W)
file_end.grid(row=2, columnspan=4, sticky="w")

find_window.lift(root)
root.mainloop()