Python - сделать кнопку изменить положение случайно - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно иметь возможность менять положение кнопки при нажатии на нее.Позиция меняется случайным образом каждый раз, когда я нажимаю на нее.Но все, что я получаю, это ошибка.Вот мой код:

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 голосов
/ 25 сентября 2018

Кажется, 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())

Это прекрасно работает по крайней мере для меня (Python 3.6.5 под win10).

Вам придется уменьшить случайные значения, сгенерированные для x и y, или части кнопки иногда будут находиться за пределами окна...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...