Почему Tkinter не отображает кнопку? - PullRequest
0 голосов
/ 14 января 2020
import Tkinter as ass
root = ass.Tk()
frame = ass.Frame(root)
button1 = ass.Button(frame, command=button1(), text='Kushagra', width=50, height=40)
button1.pack(side=ass.LEFT)
root.mainloop()

button1() - это функция, которую я сделал, но я не думаю, что она уместна. После этого я получаю только пустое окно. Как мне это исправить?

Ответы [ 2 ]

3 голосов
/ 14 января 2020

Вы не упаковали виджет кадра после создания кадра. Ниже приведен отредактированный код

import tkinter as ass
root = ass.Tk()
frame = ass.Frame(root)
frame.pack()
button1 = ass.Button(frame, text="QUIT")
button1.pack(side=ass.LEFT)
root.mainloop()
2 голосов
/ 14 января 2020

Вы должны pack кадр, если вы хотите, чтобы он отображался. Это позволит отобразить кнопку, но функция button1() не будет работать так, как вы хотите, потому что она будет вызываться, когда она передается Button как command, так как вы использовали круглые скобки () после давая его кнопке как command. Вам просто нужно удалить эти скобки.

Вот так:

import tkinter as ass


def button1():
    return


root = ass.Tk()
frame = ass.Frame(root)
frame.pack()
button1 = ass.Button(frame, command=button1, text='Kushagra', width=50, height=40)
button1.pack(side=ass.LEFT)
root.mainloop()

И если вам нужно передать аргументы любой функции, вы должны использовать lambda, прежде чем передать ее как command к любому Button.

Как это:

import tkinter as ass


def test(a):
    print(a)


root = ass.Tk()
frame = ass.Frame(root)
frame.pack()
button1 = ass.Button(frame, command=lambda: test(1), text='Kushagra', width=50, height=40)
button1.pack(side=ass.LEFT)
root.mainloop()
...