用python做个带GUI的求根公式吧

2022-08-01,,,,

python做个GUI求根公式

解题程序

在本文中,将用python实现解一元二次方程ax^2+bx+c=0(a≠0)的求根公式,并设计基于TK的GUI界面。

  • 实现效果
  • 程序编写
    • 整体
    • GUI界面
  • 应用场景

实现效果

如下图:

用户通过GUI界面输入a,b,c的值,程序会自动判断输入是否为数字和是否有实数根,并在下方的输出框内输出反馈或结果。
(GUI同时兼容MacOS与Windows操作系统)
(解题程序)

程序编写

本程序由pythonIDLE与pycharmDebug编写而成。

判断用户是否输入数字

导入tkinter,tkinter.filedialog,math,并def一个函数来判断用户是否输入数字。
利用float的特性来判断是否是数字。

# 对方已掉线 <-一个朋友,提供方程解法代码~
# 凉了本凉<-GUI
# 求根公式
from tkinter import*
from tkinter.filedialog import*
import math
def is_number(s):
    try:
        float(s)
        return False
    except (TypeError, ValueError):
        pass
    return True

创建主程序(定义GUI功能)

使用刚才的is_number(s)来判断用户是否在GUI内输入数字。
(在tkinter中换行使用/n)
(在tkinter中获取与交互的函数时要用函数名.get())

#图形界面
#执行
def os():
    if is_number(a.get()) == True:
        text.insert(END,"a不是数值,重新输入\n\n")
        if is_number(b.get()) == True:
            text.insert(END,"b不是数值,重新输入\n\n")
            if is_number(c.get()) == True:
                text.insert(END,"c不是数值,重新输入\n\n")
                

然后设置一个新变量delta(见下图),后用关与delta的公式将其赋值来判断是否有实数根delta = int(b.get())**2-4*int(a.get())*int(c.get())
以及判断是否为方程与输出解。

    if int(a.get()) != 0:
        delta = int(b.get())**2-4*int(a.get())*int(c.get())
        if delta < 0:
            text.insert(END,"无实数根 delta<0\n\n")
        elif delta == 0:
            s = -float(b.get())/(2*float(a.get()))# tmsb

            text.insert(END,"x1=x2=" + str(s) +"\n\n") # tmsb
        else:
            root_delta = math.sqrt(delta)
            x1 = (-int(b.get())+root_delta)/(2*int(a.get()))
            x2 = (-int(b.get())-root_delta)/(2*int(a.get()))
            text.insert(END,"x1=%s" % x1, "\a", "x2=%s" % x2 +"\n\n")
    else:  
        text.insert(END,"这不是一个一元二次方程\n\n")
            

这样就完成了在GUI中的所有求根运算与数字,方程,实数根的判断。

创建主程序(定义GUI外观与交互界面)

在这里我来列下定义GUI外观与交互界面的部分常用函数:

  1. window = Tk()创建窗口。
  2. label = Label(window, text = "...")显示文字。
  3. lblt = Label(window, text = "...")写入标题。
  4. 变量名 = StringVar()在GUI中创建交互变量。
  5. txtt = Entry(window,textvariable = 变量名)创建可交互输入框。
  6. button = Button(window, text = "OK",command = 定义的函数(要执行的进程))创建可交互按钮。
  7. text = Text(window)文字显示框。

最后别忘了调用(不然啥都不会显示)。

  1. label / lblt / txtt / button / text .pack()打包调用。
  2. window.mainloop()创建,循环。

GUI界面代码(跳出定义(GUI功能) )。

window = Tk()
label = Label(window, text = "求根公式")
#a
lblt1 = Label(window, text = "↓↓写入a↓↓")
a = StringVar()
txtt1 = Entry(window,textvariable = a)
#b
lblt2 = Label(window, text = "↓↓写入b↓↓")
b = StringVar()
txtt2 = Entry(window,textvariable = b)
#c
lblt3 = Label(window, text = "↓↓写入c↓↓")
c = StringVar()
txtt3 = Entry(window,textvariable = c)

button = Button(window, text = "OK",command = os )
text = Text(window)

打包,创建,循环。

#调用
label.pack()
#a
lblt1.pack()
txtt1.pack()
#b
lblt2.pack()
txtt2.pack()
#c
lblt3.pack()
txtt3.pack()

button.pack()
text.pack()
window.mainloop()

这样,编码就完成啦(效果下图)。

总程序

最后把总程序写上,也可去我的下载界面获取跟多程序。

# 对方已掉线
# 凉了本凉
# 求根公式
from tkinter import*
from tkinter.filedialog import*
import math
def is_number(s):
    try:
        float(s)
        return False
    except (TypeError, ValueError):
        pass
    return True
#图形界面
#执行
def os():
    if is_number(a.get()) == True:
        text.insert(END,"a不是数值,重新输入\n\n")
        if is_number(b.get()) == True:
            text.insert(END,"b不是数值,重新输入\n\n")
            if is_number(c.get()) == True:
                text.insert(END,"c不是数值,重新输入\n\n")
    if int(a.get()) != 0:
        delta = int(b.get())**2-4*int(a.get())*int(c.get())
        if delta < 0:
            text.insert(END,"无实数根 delta<0\n\n")
        elif delta == 0:
            s = -float(b.get())/(2*float(a.get()))# tmsb

            text.insert(END,"x1=x2=" + str(s) +"\n\n") # tmsb
        else:
            root_delta = math.sqrt(delta)
            x1 = (-int(b.get())+root_delta)/(2*int(a.get()))
            x2 = (-int(b.get())-root_delta)/(2*int(a.get()))
            text.insert(END,"x1=%s" % x1, "\a", "x2=%s" % x2 +"\n\n")
    else:  
        text.insert(END,"这不是一个一元二次方程\n\n")
            
window = Tk()
label = Label(window, text = "求根公式")
#a
lblt1 = Label(window, text = "↓↓写入a↓↓")
a = StringVar()
txtt1 = Entry(window,textvariable = a)
#b
lblt2 = Label(window, text = "↓↓写入b↓↓")
b = StringVar()
txtt2 = Entry(window,textvariable = b)
#c
lblt3 = Label(window, text = "↓↓写入c↓↓")
c = StringVar()
txtt3 = Entry(window,textvariable = c)

button = Button(window, text = "OK",command = os )
text = Text(window)

#调用
label.pack()
#a
lblt1.pack()
txtt1.pack()
#b
lblt2.pack()
txtt2.pack()
#c
lblt3.pack()
txtt3.pack()

button.pack()
text.pack()
window.mainloop()

应用场景

这是一个带GUI的求根程序,可应用在所有需要求根的场景,也可修改后应用在其他程序 / 项目中。
特别鸣谢:“对方已掉线”~

后可能会有更多关于解题程序的文章~ 六年级凉了本人,请支持~

本文地址:https://blog.csdn.net/weixin_45739505/article/details/107371189

《用python做个带GUI的求根公式吧.doc》

下载本文的Word格式文档,以方便收藏与打印。