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()
После запуска этого кода, как я могу получить отдельный ввод имени пользователя и пароля с помощью этого метода. Я сейчас немного смущен!
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()