Кнопка Python Tkinter не отображается?

#python #tkinter #calculator

#python #tkinter #калькулятор

Вопрос:

Я новичок в tkinter, и у меня есть этот код на python:

 #import the tkinter module
from tkinter import *
import tkinter


calc_window = tkinter.Tk()
calc_window.title('Calculator Program')


button_1 = tkinter.Button(text = '1', width = '30', height = '20')
button_1 = '1'

calc_window.mainloop()
  

Но когда я запускаю ее, кнопка не появляется. Кто-нибудь знает, почему? Спасибо!

Комментарии:

1. вам нужно добавить кнопку в calc_window

2. Просто из любопытства, почему вы сделали from tkinter import * and import tkinter ? Это излишне. В общем, придерживайтесь последнего варианта.

3. Почему бы вам просто не погуглить «кнопку tkinter»? Первое нажатие приводит к этому превосходному примеру заполненной страницы: effbot.org/tkinterbook/button.htm

Ответ №1:

Для отображения виджета требуется два шага: вы должны создать виджет и добавить его в макет. Это означает, что вам нужно использовать один из менеджеров геометрии pack place или grid разместить его где-нибудь в его контейнере.

Например, вот один из способов заставить ваш код работать:

 button_1 = tkinter.Button(text = '1', width = '30', height = '20')
button_1.pack(side="top")
  

Выбор grid или pack зависит от вас. Если вы раскладываете вещи по строкам и столбцам, grid это имеет смысл, потому что вы можете указывать строки и столбцы при вызове grid . Если вы выравниваете объекты слева направо или сверху вниз, pack это немного проще и предназначено для такой цели.

Примечание: place используется редко, поскольку он предназначен для точного управления, что означает, что вы должны вручную вычислять координаты x и y, а также ширину и высоту виджета. Это утомительно и обычно приводит к появлению виджетов, которые плохо реагируют на изменения в главном окне (например, при изменении размера пользователем). Вы также получаете несколько негибкий код.

Важно знать, что вы можете использовать оба pack и grid вместе в одной программе, но вы не можете использовать оба в разных виджетах, которые имеют одного и того же родителя.

Ответ №2:

 from tkinter import *
import tkinter


calc_window = tkinter.Tk()
calc_window.title('Calculator Program')
frame = Frame(calc_window )
frame.pack()


button_1 = tkinter.Button(frame,text = '1', width = '30', height = '20')
button_1.pack(side=LEFT)


calc_window.mainloop()
  

попробуйте добавить кнопку с помощью pack(). я не понимаю, почему вы пытались назначить button_1 = '1' в своем коде

аккуратный пример:

 from Tkinter import *

class App:

    def __init__(self, master):

        frame = Frame(master)
        frame.pack()

        self.button = Button(
            frame, text="QUIT", fg="red", command=frame.quit
            )
        self.button.pack(side=LEFT)

        self.hi_there = Button(frame, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

    def say_hi(self):
        print "hi there, everyone!"

root = Tk()

app = App(root)

root.mainloop()
  

Комментарии:

1. Кнопке нужен контейнер для упаковки, чего нет в вашем первом примере.

2. @mhawke пожалуйста, проверьте сейчас

3. Так лучше. Что происходит при ее запуске?

4. @mhawke в текущей системе не установлен tkinter

Ответ №3:

Вы не упаковываете button_1. Код:

 from tkinter import *

root = Tk()
root.title('Calculator Program')

button_1 = Button(root, text='1', width='30', height='20')
button_1.pack()

root.mainloop()
  

Это просто!
Надеюсь, это поможет!

Ответ №4:

 from tkinter import *

calc_window = Tk()

calc_window.title('Calculator Program')

button_1 = Button(text = '1')

button_1.place(x=0,y=0,width = 30, height = 20)

calc_window.mainloop()
  

Комментарии:

1. Краткое объяснение также может помочь (даже если здесь это несколько очевидно).