单击按钮时,我需要能够更改按钮的位置。每次单击时,仓位都会随机变化。但是我得到的只是一个错误。这是我的代码:
from tkinter import *
from random import randrange
class Window(Frame):
def position(self):
return randrange(0,400),randrange(0,300)
def __init__(self,master=None):
Frame.__init__(self,master)
self.master = master
self.__init__window()
def __init__window(self):
self.master.title("GUI")
self.pack(fill=BOTH, expand=1)
Button1 = Button(self, text="Click me if you can",command=self.Message)
Button1.place(*position())
menu=Menu(self.master)
self.master.config(menu=menu)
file = Menu(menu)
file.add_command(label="Exit", command=self.client_exit)
menu.add_cascade(label="File",menu=file)
edit = Menu(menu)
edit.add_command(label="Show text", command=self.showText)
menu.add_cascade(label="Edit", menu=edit)
def Message(self):
print("Hello world")
def showText(self):
text = Label(self, text="Hey there!")
text.pack()
def client_exit(self):
exit()
root = Tk()
root.geometry("400x300")
app = Window(root)
root.mainloop()
“ Button1.place”是需要更改的按钮的位置,但是我完全不知道该怎么做。我也使用了变量。
答案 0 :(得分:1)
似乎place()
需要关键字参数。您可以让函数position()
返回一个字典并将其解压缩到place()
语句中:
def position(self):
return {'x':randrange(0,400),'y':randrange(0,300)}
在按钮上放置:
self.Button1.place(**self.position())
您还需要在按钮名称前加上“ self”,才能从功能__init__window()
外部访问按钮。
然后只需在按钮回调函数中添加place()
语句的副本:
def Message(self):
print("Hello world")
self.Button1.place(**self.position())
至少对我来说不错(win10下的Python 3.6.5)。
您必须减少为x和y生成的随机值,否则按钮的某些部分有时会在窗口之外...