一个Python的GUI为什么出错?

from tkinter import *
import random
from math import *
from tkinter import messagebox

from pefile import b


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        a = StringVar()
        b = StringVar()
        c = StringVar()
        
        self.label01 = Label(self, text="二次项系数:").grid(row=0, column=0)
        self.entry01 = Entry(self, textvariable=a).grid(row=0, column=1)

        self.label02 = Label(self, text="一次项系数:").grid(row=1, column=0)
        self.entry02 = Entry(self, textvariable=b).grid(row=1, column=1)
        
        self.label03 = Label(self, text="常数项系数:").grid(row=2, column=0)
        self.entry03 = Entry(self, textvariable=c).grid(row=2, column=1)

        Button(self, text="计算", command=self.jisuan).grid(row=3, column=1, sticky=EW)
        Button(self, text="退出").grid(row=3, column=2, sticky=E)

        self.label04 = Label(self, text="请先将方程的右端化为0").grid(row=4, sticky=EW)
    
    def jisuan(self):
        aa = self.label01.get()
        bb = self.label01.get()
        cc = self.label01.get()
        print(aa)
        d = int((bb)**2-4*(aa)*(cc))
        if d < 0:
            messagebox.showinfo("计算结果","此二次方程无实数根")
        elif d == 0:
            outcome = -b/(2*aa)
            messagebox.showinfo("计算结果","方程有且仅有一个实数根:%d" % outcome)
        elif d > 0:
            x1 = (-b + sqrt(d))/(2*aa)
            x2 = (-b - sqrt(d))/(2*aa)
            messagebox.showinfo("计算结果","方程有两个实数根,分别为:%d和%d" % (x1, x2))



if __name__=='__main__':
    root=Tk()
    root.geometry("400x300+200+300")
    app=Application(master=root)
    root.mainloop()


input()

 

改了一下代码,界面运行正常,排除了代码中错误,但是其计算部分你看一下再作调整。

from tkinter import *
import random
from math import *
from tkinter import messagebox

#from pefile import b


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        a = StringVar()
        b = StringVar()
        c = StringVar()

        self.label01 = Label(self, text="二次项系数:").grid(row=0, column=0)
        self.entry01 = Entry(self, textvariable=a)
        self.entry01.grid(row=0, column=1)

        self.label02 = Label(self, text="一次项系数:").grid(row=1, column=0)
        self.entry02 = Entry(self, textvariable=b)
        self.entry02.grid(row=1, column=1)

        self.label03 = Label(self, text="常数项系数:").grid(row=2, column=0)
        self.entry03 = Entry(self, textvariable=c)
        self.entry03.grid(row=2, column=1)

        Button(self, text="计算", command=self.jisuan).grid(
            row=3, column=1, sticky=EW)
        Button(self, text="退出",command=self.quit).grid(row=3, column=2, sticky=E)

        self.label04 = Label(self, text="请先将方程的右端化为0").grid(row=4, sticky=EW)

    def jisuan(self):
        aa = self.entry01.get()
        bb = self.entry02.get()
        cc = self.entry03.get()
        print(aa)
        d = float((int(bb)**2-4*(int(aa)*int(cc))))
        if d < 0:
            messagebox.showinfo("计算结果", "此二次方程无实数根")
        elif d == 0:
            outcome = -b/(2*aa)
            messagebox.showinfo("计算结果", "方程有且仅有一个实数根:%d" % outcome)
        elif d > 0:
            x1 = (-b + sqrt(d))/(2*aa)
            x2 = (-b - sqrt(d))/(2*aa)
            messagebox.showinfo("计算结果", "方程有两个实数根,分别为:%d和%d" % (x1, x2))


if __name__ == '__main__':
    root = Tk()
    root.geometry("400x300+200+300")
    app = Application(master=root)
    root.mainloop()

 

错误在于self.entry01 = Entry(self, textvariable=a).grid(row=0, column=1),加上grid后就变成了None类型,将其拆分为两行:

self.entry01 = Entry(self, textvariable=a)

self.entry01.grid(row=0, column=1)

后面的aa写成:aa = self.entry01.get()

其他的如bb,cc,如有调用获取其值的,作相同处理。

 

贴一下错误信息,更好分析原因。

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y