Ткинтер не открывается windows как положено - PullRequest
0 голосов
/ 14 марта 2020

У меня есть кусок кода, как показано ниже. Хотя он работает нормально, но независимо от того, какой номер опции я ввожу (1, 2, 3 или 4), он открывает то же самое окно, только под названием «База данных сотрудников». Я хочу, чтобы, если я введу 2, он открыл «Регистр посещаемости» и т. Д. И т. Д.

from tkinter import *
window = Tk()
window.title("multisoft")
title = Label(window, text="Multisoft", font=("Arial Bold", 30))
title.grid(column=250, row=0)
window.geometry("500x500")
emp_data = Label(window, text="1.Employee Database  ", font=("Arial Bold", 10))
emp_data.grid(column=0, row=1)
atd_reg = Label(window, text="2.Attendance Register ", font=("Arial Bold", 10))
atd_reg.grid(column=0, row=2)
pay = Label(window, text="3.Payment                   ", font=("Arial Bold", 10))
pay.grid(column=0, row=3)
Quit = Label(window, text="4.Quit                           ", font=("Arial Bold", 10))
Quit.grid(column=0, row=4)
txt = Entry(window, width=25)
txt.grid(column=0, row=5)

def clicked():
    if txt.get() == 1 or "employee database":
        em_data = Tk()
        em_data.title("Employee Database")
        em_data.geometry("500x500")
        but.configure()
    elif txt.get() == 2 or "attendance register":
        at_reg = Tk()
        at_reg.title("Attendance Register")
        at_reg.geometry("500x500")
        but.configure()
    elif txt.get() == 3 or "payement":
        ment = Tk()
        ment.title("Payment")
        ment.geometry("500x500")
        but.configure()
    elif txt.get == 4 or "quit":
        window.destroy()
        but.configure()

but = Button(window, text="enter", command=clicked)
but.grid(column=1, row=5)
window.mainloop()

Какую ошибку я делаю? Кто-нибудь может указать, пожалуйста? Пожалуйста, помогите, поскольку я новичок в кодировании и создании GUI в python в первый раз.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

В вашей функции clicked() неверные операторы if. Потому что == имеет более высокий приоритет, чем ключевое слово or. Следовательно, оператор if будет оцениваться как if (txt.get() == 1) or "employee database", и это всегда True, поскольку строка "employee database" не пуста, а txt.get() также всегда будет возвращать строку и, следовательно, никогда не будет равняться 1, поэтому первое условие всегда будет запускать, потому что "employee database" == True".

Вместо этого вам нужно сделать, если такие утверждения, как это:

if (txt.get() == "1" or txt.get() == "employee database"):
    # And code follows here...
0 голосов
/ 14 марта 2020

Посмотрите на это:

if txt.get() == 1 or "employee database":

== имеет приоритет над or. Таким образом, этот оператор if равен if (txt.get() == 1) or "employee database"

if "employee database" равен True, поскольку строка всегда будет содержать текст. Таким образом, это будет только первое выполненное условие.

Вы можете использовать if Userinput == ("1" or "employee database") или if Userinput in ("1","employee database"). Чтобы быть полностью уверенным, вам также следует пересмотреть другое elif утверждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...