Кажется, 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, или части кнопки иногда будут находиться за пределами окна...