#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 *
andimport 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. Краткое объяснение также может помочь (даже если здесь это несколько очевидно).