如何在Tkinter上单击按钮后更改标签的值

时间:2017-07-17 23:29:41

标签: python python-3.x oop inheritance tkinter

我正在创建一个简单的银行帐户GUI,当我点击菜单时#34;兴趣"变量从1变为2,这应该将当前余额的值更改10%,但值保持不变,请提供您的见解。

out <- rep(root,each=length(type))
regmatches(out, regexpr("xxx",out)) <- type
out
#[1] "how to manage resturant"      "how to manage grocery store" 
#[3] "how to manage retail store"   "how to run resturant"        
#[5] "how to run grocery store"     "how to run retail store"     
#[7] "how to operate resturant"     "how to operate grocery store"
#[9] "how to operate retail store" 

2 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。多个类文件似乎不像您认为的那样工作,有些事情是错误的。我已经将你的程序重新编写成我认为你正在尝试做的事情,并且我把所有内容都变成了一个大的课程,因为在这种情况下它更有意义。通过在类之外创建变量并创建多个类,您使事情变得更加复杂。使用几个类没有什么不对,但是你采用的方式是让事情变得更加困难。

我做的第一件事就是创建我们将要使用的所有类变量/属性。

为了让我们前进更容易,我通过将self.作为前缀添加到所有变量/小部件名称,使每个小部件和变量成为类属性。这将允许我们在没有问题的情况下与任何类方法中的每个属性进行交互和更改,如果您在路上添加更多选项,则已经定义了属性并准备好进行更改。

接下来,我将所有单独的类方法移动到主类中,以便更轻松地使用它。

我将帐户类型的if / else语句替换为方法。这将允许我们更新标签,以便在帐户类型更改或从余额中添加或删除金额时显示余额或利息。

我修改了depositBalancedepositWithdraw方法,因为您的输入字段不仅仅限于数字,如果用户放入其他内容或将其留空,可能会导致错误。< / p>

我更改standardinterest方法以更新typeOfAccount属性并通过调用type_account方法更新标签。

最后但并非最不重要的一些清理,所以代码没有毫无意义的间距,并确保我们遵循DRY(不要重复自己)标准。

以下是我上面提到的所有更改的返工代码。如果您对此有所帮助,请告诉我。

from tkinter import *
from random import randint

class GUI:
    def __init__(self, master):

        self.master = master
        self.typeOfAccount = "1"
        self.balance = (randint(100, 500))
        self.rate = 0.1

        self.frame = Frame(master)
        self.frame.pack()

        self.toolbar = Frame(root)
        self.toolbar.pack(side=TOP, fill=X)

        self.button1 = Button(self.toolbar, text="Deposit", width = 13, command=self.depositBalance)
        self.button2 = Button(self.toolbar, text="Withdraw",width = 13, command=self.depositWithdraw)
        self.button1.pack(side=LEFT)
        self.button2.pack(side=RIGHT)

        self.menu = Menu(self.master)
        self.master.config(menu = self.menu)
        self.subMenu = Menu(self.menu)
        self.menu.add_cascade(label="Type of Account", menu=self.subMenu)
        self.subMenu.add_command(label="Standard", command=self.standard)
        self.subMenu.add_command(label="Interest", command=self.interest)

        self.text = Entry(self.master)
        self.text.pack()

        self.w = Label(root, text="Current Balance: {}".format(self.balance))
        self.w.pack()
        #removed "tkinter." not needed because of the type of import you used
        self.w1 = StringVar()

    def type_account(self):
        if self.typeOfAccount == "1":
            self.w.config(text="Current Balance: {}".format(self.balance))

        elif self.typeOfAccount == "2":
            interest = self.balance * self.rate
            self.w.config(text="Current Balance: {}".format(interest))

    def depositBalance(self):
        try:
            if int(self.text.get()) > 0:
                a = int(self.text.get())
                self.balance = a + self.balance
                self.type_account()
        except:
            print("Blank or non numbers in entry field")

    def depositWithdraw(self):
        try:
            if int(self.text.get()) > 0:
                a = int(self.text.get())
                self.balance = self.balance - a
                self.type_account()
        except:
            print("Blank or non numbers in entry field")

    def standard(self):
        self.typeOfAccount = "1"
        self.type_account()

    def interest(self):
        self.typeOfAccount = "2"
        self.type_account()

if __name__ == "__main__":

    root = Tk()
    root.title("Bank Account")
    root.minsize(width=250, height=100)
    root.maxsize(width=300, height=150)

    app = GUI(root)

    root.mainloop()

答案 1 :(得分:0)

例如,您应该设置self.w1,(而不仅仅是w1),然后您可以从该类中的任何实例方法更新文本。