python - 使用 python 在 GUI 上显示乳胶
问题描述
我正在创建一个“计算器”来整合和推导数学方程。我想在乳胶的gui中显示结果。
有谁知道创建这个?
import tkinter as tk
from tkinter import ttk
def integrate():
import sympy as sp
x=sp.Symbol('x')
eq.get()
integral=sp.integrate(eq,x)
var.set('Integration result='+ 'C\u2081')
win=tk.Tk() # defines window
win2=ttk.Labelframe(win,text='')
win2.grid(column=0, row=0)
# Creates a static txt label
eq_static=ttk.Label(win2,text='Introduce the equation f(x)',font=("Times New Roman", 14))
eq_static.grid(column=0,row=0,padx=5,pady=5)
eq=tk.StringVar()
eq_Entered=ttk.Entry(win2,width=40, textvariable=eq)
eq_Entered.grid(column=1,row=0,padx=5,pady=5)
# Creates a static txt label
var=tk.StringVar()
eq_static=ttk.Label(win2,textvariable=var,font=("Times New Roman", 14))
var.set('Result')
eq_static.grid(column=0,row=3,padx=5,pady=5)
# Calculate button
action=ttk.Button(win2,text='Integrate',command=integrate)
action.grid(column=2,row=0,padx=5,pady=5)
win2.mainloop()
解决方案
您可以使用sympy.preview函数生成图像,然后使用 BytesIO 和 PIL 使其与 tkinter 兼容。这是一个猜测:
import tkinter as tk
from tkinter import ttk
import sympy as sp
from io import BytesIO
from PIL import Image, ImageTk
def integrate():
x=sp.Symbol('x')
integral=sp.integrate(eq.get(),x)
var.set('Integration result='+ 'C\u2081')
obj = BytesIO()
sp.preview(integral, viewer='BytesIO', output='png', outputbuffer=obj)
obj.seek(0)
img_lbl.img = ImageTk.PhotoImage(Image.open(obj))
img_lbl.config(image=img_lbl.img)
win=tk.Tk() # defines window
win2=ttk.Labelframe(win,text='')
win2.grid(column=0, row=0)
# Creates a static txt label
eq_static=ttk.Label(win2,text='Introduce the equation f(x)',font=("Times New Roman", 14))
eq_static.grid(column=0,row=0,padx=5,pady=5)
eq=tk.StringVar(value='4*x')
eq_Entered=ttk.Entry(win2,width=40, textvariable=eq)
eq_Entered.grid(column=1,row=0,padx=5,pady=5)
# Creates a static txt label
var=tk.StringVar()
eq_static=ttk.Label(win2,textvariable=var,font=("Times New Roman", 14))
var.set('Result')
eq_static.grid(column=0,row=3,padx=5,pady=5)
# Calculate button
img_lbl = tk.Label(win2)
img_lbl.grid()
action=ttk.Button(win2,text='Integrate',command=integrate)
action.grid(column=2,row=0,padx=5,pady=5)
win2.mainloop()
另请注意,我修复了您的集成调用以将 StringVar 的内容而不是 StringVar 本身传递给 sympy。
推荐阅读
- javascript - 使用 openlayers 获取 trkpt 详细信息
- chef-infra - 仅在特定平台版本上安装说明书
- c# - c#中二维数组的集合
- javascript -
refetchQueries "未知指令 "_"。" - javascript - 如何链接或路由反应语义 UI 下拉组件
- python - 使用 PySpark 以 orc 格式编写大量数据帧时,如何避免 OOM 问题?
- android - 为 Google SignIn Android 的同一 OAuth 添加多个 SHA
- mysql - 如何解决 MySQL Left WHERE 条件错误?
- android - 我们可以创建指向没有在 Android Manifest.xml 中注册主机(域)的 Android 应用程序的深层链接吗?
- intershop - How to add new sub resource to a standard Intershop AbstractResourceObject