随着 Tkinter 中字符串长度的增加,整个文本不会出现 Canvas Python
Whole text doesn't appear as length of string increases in Tkinter Canvas Python
我是 Python 的 GUI 新手。我一直在尝试在 Canvas 上显示一些文本。但是,它只出现了最后一部分,而其余部分则隐藏在 canvas 的边界之外。
我的代码如下:
首先:canvas,以及滚动条定义:
window = Tk() #instantiate a window
window.geometry("650x520")
window.title("Practice")
window.config(background="white")
frame = Frame(window, width=600, height=400)
canvas = Canvas(frame, bg='white', width=500, height=300, scrollregion=(0,0,500,500))
hbar = Scrollbar(frame, orient=HORIZONTAL)
vbar = Scrollbar(frame, orient=VERTICAL)
prompt = Label(window, text="Enter the word you'd like to find its definition:", bg="white", font="5")
entry = Entry(window, font="5")
submit = Button(window, text="Search!", font="5", command=lambda: search_gui(words,entry.get().lower(),canvas))
prompt.pack()
entry.pack()
submit.pack()
frame.pack(expand=True, fill=BOTH)
hbar.pack(side=BOTTOM, fill=X)
hbar.config(command=canvas.xview)
vbar.pack(side=RIGHT, fill=Y)
vbar.config(command=canvas.yview)
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
canvas.pack(side=LEFT, expand=True, fill=BOTH)
window.mainloop()
second:调用create_text
的代码部分
#string is a text of several lines (includes new line characters)
disp.create_text(10,10 text= string)
我曾多次尝试更改 create_text
函数的 x 和 y 参数的值。但是,如果它对一个字符串有效,则对另一个字符串无效。此外,它只适用于非常简单的一行字符串,但我从来没有成功地调整它以适应更复杂的字符串,比如我的代码中出现的字符串。
另一个问题(我想可能是相关的)
滚动条无法正常工作。水平的永远不会激活,而垂直的总是激活。
抱歉拖了这么久。
如果有人能告诉我哪里出了问题,我将不胜感激。
提前致谢
PS:我的代码的目的是显示一个单词及其定义,其中它的定义可能需要几行。一开始我用过标签。但是,它们不适合很长的定义并且不带滚动条。所以,我选择了另一个选项,我发现大多数程序员都建议这是 canvas。所以,请原谅我,但我对此有点无知。
感谢我们的同事 Billy,
我改用了文本小部件,一切都按照我想要的方式修复了。
文本小部件更符合我的要求(阅读我的问题以了解我的要求)。
“您是否尝试过使用 tkinter 的文本小部件?我认为它更适合您的需求。您可以为文本小部件设置换行并更改其状态,使其不允许编辑。”
–比利
我是 Python 的 GUI 新手。我一直在尝试在 Canvas 上显示一些文本。但是,它只出现了最后一部分,而其余部分则隐藏在 canvas 的边界之外。 我的代码如下:
首先:canvas,以及滚动条定义:
window = Tk() #instantiate a window
window.geometry("650x520")
window.title("Practice")
window.config(background="white")
frame = Frame(window, width=600, height=400)
canvas = Canvas(frame, bg='white', width=500, height=300, scrollregion=(0,0,500,500))
hbar = Scrollbar(frame, orient=HORIZONTAL)
vbar = Scrollbar(frame, orient=VERTICAL)
prompt = Label(window, text="Enter the word you'd like to find its definition:", bg="white", font="5")
entry = Entry(window, font="5")
submit = Button(window, text="Search!", font="5", command=lambda: search_gui(words,entry.get().lower(),canvas))
prompt.pack()
entry.pack()
submit.pack()
frame.pack(expand=True, fill=BOTH)
hbar.pack(side=BOTTOM, fill=X)
hbar.config(command=canvas.xview)
vbar.pack(side=RIGHT, fill=Y)
vbar.config(command=canvas.yview)
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
canvas.pack(side=LEFT, expand=True, fill=BOTH)
window.mainloop()
second:调用create_text
的代码部分
#string is a text of several lines (includes new line characters)
disp.create_text(10,10 text= string)
我曾多次尝试更改 create_text
函数的 x 和 y 参数的值。但是,如果它对一个字符串有效,则对另一个字符串无效。此外,它只适用于非常简单的一行字符串,但我从来没有成功地调整它以适应更复杂的字符串,比如我的代码中出现的字符串。
另一个问题(我想可能是相关的) 滚动条无法正常工作。水平的永远不会激活,而垂直的总是激活。
抱歉拖了这么久。 如果有人能告诉我哪里出了问题,我将不胜感激。
提前致谢
PS:我的代码的目的是显示一个单词及其定义,其中它的定义可能需要几行。一开始我用过标签。但是,它们不适合很长的定义并且不带滚动条。所以,我选择了另一个选项,我发现大多数程序员都建议这是 canvas。所以,请原谅我,但我对此有点无知。
感谢我们的同事 Billy,
我改用了文本小部件,一切都按照我想要的方式修复了。
文本小部件更符合我的要求(阅读我的问题以了解我的要求)。
“您是否尝试过使用 tkinter 的文本小部件?我认为它更适合您的需求。您可以为文本小部件设置换行并更改其状态,使其不允许编辑。”
–比利