#python-3.x #user-interface #tkinter
#python-3.x #пользовательский интерфейс #tkinter
Вопрос:
Я пишу код для графического интерфейса tkinter с использованием класса, однако я замечаю, что при запуске появляется второе окно, помимо основного, которое я создал. Я пробовал несколько вещей, но они либо нарушают код, либо окно становится черным. Смотрите код ниже.
import tkinter as gui
class loginWindow(gui.Frame):
def __init__(self):
super(loginWindow, self).__init__()
self.logUI()
def logUI(self):
self.mainWindow = gui.Tk()
self.mainWindow.title("GLSC IT Inventory")
self.mainWindow.minsize(400, 150)
self.mainWindow.maxsize(400, 150)
self.mainWindow.geometry("400x150")
self.greet_label = gui.Label(self.mainWindow, text="Welcome!!!")
self.greet_label.place(x=180, y=5)
self.uname_label = gui.Label(self.mainWindow, text="Username:")
self.uname_label.place(x=10, y=24)
self.uname_input = gui.StringVar()
self.uname_field = gui.Entry(self.mainWindow, bd=4, textvariable=self.uname_input)
self.uname_field.place(x=80, y=25, width=160)
self.pwd_label = gui.Label(self.mainWindow, text="Password:")
self.pwd_label.place(x=10, y=54)
self.pwd_input = gui.StringVar()
self.pwd_field = gui.Entry(self.mainWindow, bd=4, textvariable=self.pwd_input, show="u2022")
self.pwd_field.place(x=80, y=55, width=160)
self.login_button = gui.Button(self.mainWindow, text="Login", command=None)
self.login_button.place(x=180, y=95)
my_app = loginWindow()
my_app.mainloop()
Комментарии:
1. Пожалуйста, исправьте форматирование кода.
logUI
кажется, у него неверный отступ, а последние пару строк кода имеют неправильное форматирование.2. Извините, это из-за некоторых проблем, с которыми я вставлял код здесь, это правильно в моей IDE.
3. Мы можем видеть только код, который вы публикуете.
4. Я знаю, я хочу сказать, что я допустил ошибку при публикации кода, поэтому он не выровнен правильно. Тем не менее @acw1668 ответил на вопрос, так что все хорошо.
Ответ №1:
Когда вы создаете экземпляр loginWindow()
, требуется экземпляр Tk()
, но его нет, поэтому он будет создан неявно для вас.
Затем Tk()
внутри создается другой экземпляр logUI()
. Итак, есть два экземпляра Tk()
.
Один из способов исправить это loginWindow
не наследуется от Frame
:
class loginWindow:
def __init__(self):
self.logUI()
def logUI(self):
...
# add for calling tkinter.mainloop()
def mainloop(self):
self.mainWindow.mainloop()
Комментарии:
1. Спасибо! Это сработало, также объяснение очень ценится, я буду знать, как избежать в будущем.