用python做个带GUI的求根公式吧
用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外观与交互界面的部分常用函数:
-
window = Tk()
创建窗口。 -
label = Label(window, text = "...")
显示文字。 -
lblt = Label(window, text = "...")
写入标题。 -
变量名 = StringVar()
在GUI中创建交互变量。 -
txtt = Entry(window,textvariable = 变量名)
创建可交互输入框。 -
button = Button(window, text = "OK",command = 定义的函数(要执行的进程))
创建可交互按钮。 -
text = Text(window)
文字显示框。
最后别忘了调用(不然啥都不会显示)。
-
label / lblt / txtt / button / text .pack()
打包调用。 -
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