Это признак использования более одной Tk()
в вашей программе. Вы можете использовать Tk()
только один раз, все остальные окна должны быть созданы с помощью Toplevel()
. Попробуйте это:
bar = Toplevel()
(Технически вы могли бы использовать Tk()
более одного раза, но на самом деле не следует; по крайней мере, пока у вас нет хорошего понимания того, как это работает.)
Редактировать: у вашего кода есть другие проблемы:
- Как упоминалось ранее: у вас должен быть только один вызов
Tk
и соответствующий вызов mainloop()
.
- Вы никогда не должны вкладывать функции в другие функции (за исключением некоторых очень редких случаев).
- Я знаю, что заманчиво использовать
place()
, но это должно быть последнее средство. Пусть tkinter вычислит, куда положить вещи, используя pack()
и grid()
. Используйте Рамки, чтобы сделать меньшие части, которые вы можете организовать. Использование place
означает большую работу для вас, и ваш код не будет выглядеть одинаково на других компьютерах, и это делает код очень сложным в обслуживании.
- Не используйте импорт подстановочных знаков (
from module import *
), это приводит к ошибкам и против PEP8.
- Весь ваш код должен быть в функциях или классах, кроме одной точки входа внизу.
- Вам никогда не нужно звонить
update_idletasks()
.
Вот как бы я это написал. Даже если сейчас это кажется слишком сложным для вас, я рекомендую вам использовать этот шаблон и привыкнуть к нему; это очень поможет вам в будущем.
import tkinter as tk
class Bpm(tk.Toplevel):
def __init__(self, master=None, **kwargs):
tk.Toplevel.__init__(self, master, **kwargs)
self.title("Bar to BPM")
self.geometry("245x150")
self.mins=tk.StringVar()
entry_frame = tk.Frame(self)
Lb1 = tk.Label(entry_frame, text="Bar:")
Lb2 = tk.Label(entry_frame, text="Bpm:")
self.Eb1 = tk.Entry(entry_frame, width=10)
self.Eb2 = tk.Entry(entry_frame, width=10)
Bb1 = tk.Button(self, text="Calculate", command=self.brtb)
Lb3 = tk.Label(self, textvariable=self.mins)
Lb1.grid(row=0, column=0, sticky='e')
Lb2.grid(row=1, column=0, sticky='e')
self.Eb1.grid(row=0, column=1)
self.Eb2.grid(row=1, column=1)
entry_frame.pack()
Bb1.pack()
Lb3.pack()
def brtb(self):
equ = int(self.Eb1.get()) * 4 / int(self.Eb2.get())
self.mins.set(equ)
def minu():
print("hi")
def main():
ana = tk.Tk()
ana.title("Ana Menü")
ana.geometry("245x170")
B1 = tk.Button(ana, command=Bpm, text="bar to min", width=123, height=5)
B1.pack()
B2 = tk.Button(ana, command=minu, text="min to bar", width=122, height=5)
B2.pack()
ana.mainloop()
if __name__ == '__main__':
main()