Python - 在Tkinter画布中输入文本

4
我想在使用Tkinter创建的画布中创建一个整数输入框。我该如何实现这个功能?
def gamescreen():
    photo = PhotoImage(file="gamescreen.gif")
    canvas.bind("<Button-1>", buttonclick_gamescreen)
    canvas.pack(expand = YES, fill = BOTH)
    canvas.create_image(1, 1, image = photo, anchor = NW)
    e1 = Entry(canvas)
    e2 = Entry(canvas)
    game1 = PhotoImage(file="1.gif")
    canvas.create_image(30, 65, image = game1, anchor = NW)
    canvas.create_window(window = e1, x=10, y=10)
    canvas.create_window(window = e2 , x=400, y=10)    
    canvas.update()
    window.mainloop()

这是我目前的代码,但输入框不会出现在画布上。我知道这可能不是用Python创建游戏最有效的方法,但我不熟悉其他方法。
谢谢您的帮助。
编辑:我已经根据提供的建议更新了代码。现在我遇到一个问题。
IndexError: tuple index out of range

以下是出现这个问题的代码行:

canvas.create_window(window = e1, x=10, y=10)
canvas.create_window(window = e2, x=400, y=10)

编辑:好的,我找到了问题所在,我需要删除x=和y=,只保留坐标本身。现在输入框已经出现了。


2
仅基于你的代码,如果你想制作游戏,你真的应该去看看 Pygame(http://pygame.org)。 - Dan Doe
或者为什么不使用GTK?http://python-gtk-3-tutorial.readthedocs.org/en/latest/ - NoBugs
谢谢回复,但这是高中的一项评估任务,所以我不确定是否有足够的时间学习如何使用Pygame或gtk。 - ThatsNotMyName
这只是一个简单的数学学习游戏,没有华丽的图形或动画,所以我认为它不太合适。 - ThatsNotMyName
4个回答

8
你可以使用create_window在画布中放置一个小部件。该方法的详细信息可以查看这里
e1 = Entry(canvas)
canvas.create_window(400,10,window=e1)

1
谢谢你的回答,但我好像又遇到了另一个错误。这次它显示“IndexError:元组索引超出范围”。我在这里和谷歌上搜索了一下错误信息,但没有找到相关的内容。 :/ - ThatsNotMyName
请修正您的答案。 - Reut Sharabani
@ReutSharabani:已修复。感谢您指出错误。 - Bryan Oakley
这个帮助了我。谢谢。 - Reut Sharabani

4

我仔细阅读了有关元组的更多信息,并成功修复了错误。

只需删除 x= 和 y=,使窗口的坐标单独存在即可。


0

取消注释您的 e1 和 e2。您必须使用 .pack() 功能。

e1.pack()
e2.pack()

这应该可以让它在屏幕上显示,其余的就取决于你了!

编辑:另外,它不应该是canvas.mainloop()吗?窗口被定义了还是画布?


谢谢您的回答,我已经成功让输入框出现了,但是现在似乎替换了放置在画布上的图像,我会继续努力找到解决方案。我在主程序中定义了窗口和画布。 - ThatsNotMyName
pack 几乎肯定不会做 OP 想要的事情——它不会将条目放置在画布上。它将创建一个画布,以适应条目小部件的大小,并且条目小部件不会随着画布内容的滚动而滚动。 - Bryan Oakley

0

你在参数的顺序上犯了错误:

应该是:

textentry = Entry(canvas)
canvas.create_window(600, 50, window=textentry, height=50, width=1000)

前两个参数指定整个文本框将以其为中心的点。 高度和宽度用于设置文本框的高度和宽度。

窗口用于指定输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接