如何在用户键入文本时使 tkinter 中的输入框垂直扩展?
how to make entry box in tkinter expand vertically as the user types text?
我想知道是否有针对 "Large Tkinter entry boxes" 的任何更新解决方案,因为我尝试过的解决方案似乎对我不起作用。
Python: 3.6.3
看了你给的示例图片后,我想到了这三个解决方案:
1.可以设置tk的高和宽window,让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只显示一行文字。如果要显示多行,则可以使用 Text。此解决方案与解决方案 1 相同,唯一的区别是使用 Text 而不是 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"""
t = Text(r)
t.pack(fill=BOTH, expand=1)
t.insert("end", text)
r.mainloop()
3. 第三个选项是您可以设置 Scrollbar(horizontal/vertical)。这样用户就可以通过滚动 vertically/horizontally.
查看所有文本
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()
我想知道是否有针对 "Large Tkinter entry boxes" 的任何更新解决方案,因为我尝试过的解决方案似乎对我不起作用。
Python: 3.6.3
看了你给的示例图片后,我想到了这三个解决方案:
1.可以设置tk的高和宽window,让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只显示一行文字。如果要显示多行,则可以使用 Text。此解决方案与解决方案 1 相同,唯一的区别是使用 Text 而不是 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"""
t = Text(r)
t.pack(fill=BOTH, expand=1)
t.insert("end", text)
r.mainloop()
3. 第三个选项是您可以设置 Scrollbar(horizontal/vertical)。这样用户就可以通过滚动 vertically/horizontally.
查看所有文本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()