Как получить вывод из класса после ввода всех значений

1
from tkinter import *

app = Tk()
app.title("First Software")
app.minsize(500, 500)

#For Input Declaration
UserName = StringVar()
pass1 = IntVar()

class Functions:
    def username(self, UserName):
        self.UserName = Username
        print(UserName.get())
    def password(self, pass1):
        self.pass1 = pass1
        print(pass1.get())

#---Label---
label = Label(text='Enter any Number between 1 and 100...').pack()

#---Entry---
entry = Entry(app, textvariable=UserName).pack()
entry1 = Entry(app, textvariable=pass1).pack()

#---Buttton---
button = Button(text='Submit', command=Functions).pack()

app.mainloop()

После запуска этого кода, как я могу получить отдельный ввод имени пользователя и пароля с помощью этого метода. Я сейчас немного смущен!

  • 0
    Вам придется создать два поля ввода для них
  • 0
    @ThatBird ОР создал 2 Ввод виджетов получить входы.
Показать ещё 1 комментарий
Теги:
tkinter

1 ответ

0
Лучший ответ

command=Functions сообщает Tkinter создать экземпляр класса Functions при нажатии кнопки "Отправить". Но он не говорит, чтобы он вызывал функции, определенные внутри Functions. Однако это определение класса немного нечетное, и вам не нужен класс, который бы содержал эти функции. Вместо этого мы можем написать простую функцию, которая получает значения UserName и pass1 и печатает их.

Я внес несколько других незначительных изменений в ваш код.

import tkinter as tk

app = tk.Tk()
app.title("First Software")
#app.minsize(500, 500)

#For Input Declaration
UserName = tk.StringVar()
pass1 = tk.IntVar()

def print_entries():
    print('User name:', UserName.get())
    print('Password:', pass1.get())

tk.Label(app, text='User name.').pack()
entry = tk.Entry(app, textvariable=UserName)
entry.pack()

tk.Label(app, text='Password\nEnter any Number between 1 and 100').pack()
entry1 = tk.Entry(app, textvariable=pass1)
entry1.pack()

tk.Button(app, text='Submit', command=print_entries).pack()

app.mainloop()

Этот код действительно не нуждается в entry имен и entry1, но я сохранил их на случай, если вы хотите добавить код, который должен ссылаться на эти виджеты по имени.

Обратите внимание, что вы не должны делать

entry = Entry(app, textvariable=UserName).pack()

Метод .pack возвращает None, поэтому вышеприведенный оператор присваивает значение None для entry. Вместо этого мы делаем

entry = tk.Entry(app, textvariable=UserName)
entry.pack()

Это назначает новый виджет Entry для entry имени, а затем вызывает его метод .pack чтобы упаковать его в окно.


Если вам нравится, вы можете обернуть этот код в классе, но я бы не стал беспокоиться о простом графическом интерфейсе. Но это один из способов сделать это:

import tkinter as tk

class App:
    def __init__(self):
        root = tk.Tk()
        root.title("First Software")
        #root.minsize(500, 500)

        #For Input Declaration
        self.UserName = tk.StringVar()
        self.pass1 = tk.IntVar()

        tk.Label(root, text='User name.').pack()
        entry = tk.Entry(root, textvariable=self.UserName)
        entry.pack()

        tk.Label(root, text='Password\nEnter any Number between 1 and 100').pack()
        entry1 = tk.Entry(root, textvariable=self.pass1)
        entry1.pack()

        tk.Button(root, text='Submit', command=self.print_entries).pack()

        root.mainloop()

    def print_entries(self):
        print('User name:', self.UserName.get())
        print('Password:', self.pass1.get())

App()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню