我正在编写一个简单的程序,它可以提取一个图像(BackgroundFinal.png)并将其显示在窗口中。我想按下窗口上的一个按钮,将图片向下移动22像素。一切正常,除了按钮不起作用。
import Tkinter
import Image, ImageTk
from Tkinter import Button
a = 0 #sets inital global 'a' and 'b' values
b = 0
def movedown(): #changes global 'b' value (adding 22)
globals()[b] = 22
return
def window(): #creates a window
window = Tkinter.Tk();
window.geometry('704x528+100+100');
image = Image.open('BackgroundFinal.png'); #gets image (also changes image size)
image = image.resize((704, 528));
imageFinal = ImageTk.PhotoImage(image);
label = Tkinter.Label(window, image = imageFinal); #creates label for image on window
label.pack();
label.place(x = a, y = b); #sets location of label/image using variables 'a' and 'b'
buttonup = Button(window, text = 'down', width = 5, command = movedown()); #creates button which is runs movedown()
buttonup.pack(side='bottom', padx = 5, pady = 5);
window.mainloop();
window()
如果我没有弄错,按钮应该更改全局“b”值,从而更改标签的y位置。我真的很感谢你的帮助,对不起我的老天爷。提前谢谢!
你这里有一些问题。
首先,使用
pack
和place
。通常,在容器小部件中只应使用1个几何体管理器。我不建议使用place
。你需要处理的工作太多了。其次,在构造按钮时调用回调
movedown
。这不是你想做的——你想传递函数,而不是函数的结果:第三,
globals
返回当前命名空间的字典——它不太可能包含整数键。要获取对由b
引用的对象的引用,您需要globals()["b"]
。即使更改了,更改全局命名空间中b
的值也不会更改标签的位置,因为标签无法知道该更改。一般来说,如果您需要使用globals
,您可能需要重新考虑您的设计。这里有一个简单的例子,我会怎么做。。。
谢谢你的回复,但这并不是我真正想要的。我会把我发现对其他有同样问题的人最有效的东西贴在这里。
本质上,在这种情况下,使用画布而不是标签要好得多。使用画布,可以使用canvas.move移动对象,下面是一个简单的示例程序
我的代码可能不完美(抱歉!)但这是基本的想法。希望我能帮助其他人解决这个问题
相关问题 更多 >
编程相关推荐