Как сделать так, чтобы после того, как пользователь нажал кнопку, он мог ввести свою информацию в Tkinter для python 3.7? - PullRequest
0 голосов
/ 29 октября 2018

Мне было интересно, может ли кто-нибудь помочь мне, так как я довольно новичок в Tkinter и получил некоторую хорошую помощь здесь раньше.

Мой запрос заключается в том, что я пытаюсь создать программу для калькулятора бюджета и использую Tkinter. Мне интересно, как вы получаете пользовательские вводы, когда пользователь может нажать на кнопку «Доходы» или «Расходы», а затем они могут ввести все свои цифры, и это будет напечатано ниже в виде таблицы.

Мой код ниже, любая информация действительно поможет мне, а также любые другие замечания, которые вы можете упомянуть о моем коде, до сих пор будет принята с благодарностью!

from time import sleep
from tkinter import * 
from tkinter import messagebox, ttk, Tk

root = Tk()

class GUI():

def taskbar(self):

    menu = Menu(root)
    file = Menu(menu)
    root.config(menu=file)
    file.add_command(label="Exit", command=self.exit_GUI)
    file.add_command(label="Information", command=self.info_popup)
    menu.add_cascade(label="File", menu=file)     

def Main_Menu(self):
    topFrame = Frame(root)
    topFrame.pack()
    bottomFrame = Frame(root)
    bottomFrame.pack(side=BOTTOM)

    Income_button = Button(topFrame, text="Enter your incomes", command=self.Income)
    Expense_button = Button(topFrame, text="Enter your expenses", command=self.Expense)
    Total_button = Button(bottomFrame, text="View Results", command=self.Total)
    Income_button.pack()
    Expense_button.pack()
    Total_button.pack()

def Income(self):
    Income_heading = Label(Toplevel(root), text="Please enter the incomes below!", font=("arial", 50, "bold"), fg="blue").pack()

def Expense(self):
    Expense_heading = Label(Toplevel(root), text="Please enter the expenses below!", font=("arial", 50, "bold"), fg="blue").pack()

def Total(self):
    pass

def exit_GUI(self):
    exit()

def info_popup(self):
    pass

g = GUI()
g.taskbar()
g.Main_Menu()
#g.Income()
#g.Expense()
g.Total()
g.info_popup()

root.mainloop()

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы должны использовать атрибуты класса для хранения значений. Затем мы можем использовать комбинацию лямбда, запись и функцию для установки этих значений.

Этот пример ниже покажет вам, как можно установить значения из окна верхнего уровня внутри класса.

import tkinter as tk


class GUI():
    def __init__(self):
        menu = tk.Menu(root)
        file = tk.Menu(menu)
        root.config(menu=file)
        file.add_command(label="Exit", command=self.exit_GUI)
        file.add_command(label="Information", command=self.info_popup)
        menu.add_cascade(label="File", menu=file)

        self.income_var = 0
        self.expense_var = 0
        self.total_var = 0

        top_frame = tk.Frame(root)
        top_frame.pack()
        bottom_frame = tk.Frame(root)
        bottom_frame.pack(side="bottom")

        tk.Button(top_frame, text="Enter your incomes", command=self.income).pack()
        tk.Button(top_frame, text="Enter your expenses", command=self.expense).pack()
        tk.Button(bottom_frame, text="View Results", command=self.total).pack()

    def set_vars(self, entry, var):
        if var == "income":
            self.income_var = entry.get()
            print(self.income_var)
        if var == "expense":
            self.expense_var = entry.get()
            print(self.expense_var)
        if var == "total":
            self.total_var = entry.get()
            print(self.total_var)

    def income(self):
        top = tk.Toplevel(root)
        tk.Label(top, text="Please enter the incomes below!", font=("arial", 12, "bold"), fg="blue").pack()
        entry = tk.Entry(top)
        entry.pack()
        tk.Button(top, text="Submit", command=lambda: (self.set_vars(entry, "income"), top.destroy())).pack()

    def expense(self):
        top = tk.Toplevel(root)
        tk.Label(top, text="Please enter the expenses below!", font=("arial", 12, "bold"), fg="blue").pack()
        entry = tk.Entry(top)
        entry.pack()
        tk.Button(top, text="Submit", command=lambda: (self.set_vars(entry, "expense"), top.destroy())).pack()

    def total(self):
        pass

    def exit_GUI(self):
        self.destroy()

    def info_popup(self):
        pass


root = tk.Tk()
g = GUI()
root.mainloop()
0 голосов
/ 29 октября 2018

Виджет для ввода информации в Tkinter - это виджет Entry. Для получения текста вы можете использовать get(). Пример:

def income_func(self, event):
    text = Income_entry.get() #For get the text into the entry

def Income(self):
    top_lvl = Toplevel(root)
    Income_heading = Label(top_lvl , text="Please enter the incomes below!", font=("arial", 50, "bold"), fg="blue").pack()
    Income_entry = Entry(top_lvl)
    Income_entry.pack()
    Income_entry.bind("<Key-Return>", income_func) #When user press `enter` this call to income_func with argument `event`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...