Python-使按钮随机改变位置

时间:2018-09-25 18:03:07

标签: python user-interface button tkinter

单击按钮时,我需要能够更改按钮的位置。每次单击时,仓位都会随机变化。但是我得到的只是一个错误。这是我的代码:

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”是需要更改的按钮的位置,但是我完全不知道该怎么做。我也使用了变量。

1 个答案:

答案 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生成的随机值,否则按钮的某些部分有时会在窗口之外...