当用户键入文本时,如何使tkinter中的输入框垂直扩展?

时间:2019-02-12 00:20:57

标签: python-3.x tkinter tkinter-entry

我想知道“大型Tkinter输入框”是否有更新的解决方案,因为我尝试过的解决方案似乎对我不起作用。

Python:3.6.3

1 个答案:

答案 0 :(得分:0)

观看完您提供的示例图像后,我提出了以下三种解决方案:

1。。您可以设置tk窗口的高度和宽度,并使 Entry 占据整个区域。在这里,我给出了屏幕的高度和宽度。

from tkinter import *

r = Tk()

screen_width = str(r.winfo_screenwidth())
screen_height = str(r.winfo_screenheight())
r.geometry(screen_width + "x" + screen_height + "+0+0")

text = """abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n"""

e = Entry()
e.pack(fill=BOTH, expand=1)
e.insert("0", text)

r.mainloop()

2。。但是Entry仅在一行中显示文本。如果要显示多行,则可以使用文本。此解决方案与解决方案1相同,唯一的区别是使用文本而不是条目

from tkinter import *

r = Tk()

screen_width = str(r.winfo_screenwidth())
screen_height = str(r.winfo_screenheight())
r.geometry(screen_width + "x" + screen_height + "+0+0")

text = """abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n"""

t = Text(r)
t.pack(fill=BOTH, expand=1)
t.insert("end", text)

r.mainloop()

3。。第三个选项是可以设置滚动条(水平/垂直)。这样用户可以通过垂直/水平书写来查看所有文本。

from tkinter import *

r = Tk()

text = """First: abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
Second: abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
Third: abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n
Fourth: abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd\n"""


def onConfigure(canvas):
    canvas.configure(scrollregion=canvas.bbox('all'))

c = Canvas(r, width=560, height=80)
t = Text(c, width=99, height=9)
t.insert("end", text)
hsb = Scrollbar(r, orient='horizontal', command=c.xview)
vsb = Scrollbar(r, orient='vertical', command=c.yview)
c.configure(xscrollcommand=hsb.set, yscrollcommand=vsb.set)
hsb.grid(row=1, column=0, sticky='esw')
vsb.grid(row=0, column=1, sticky='nes')
c.grid(row=0, column=0, sticky='nesw')

c.create_window((0, 0), window=t, anchor='center')
t.bind('<Configure>', lambda event, canvas=c: onConfigure(c))

r.mainloop()