python - 如何将基于文本的程序制作成 GUI?tkinter 会是关键吗?
问题描述
我正在完成我的第一个 Python 项目。它是一个基于文本的程序转换公制和标准单位。我可以用什么将程序变成 GUI 程序。我研究过tkinter。但是,我不确定这是否是适合我情况的最佳解决方案。我很感激一些指导,因为我对编程真的很陌生。
解决方案
如果您在函数中有获取值并返回结果的代码,那就太好了 - 不使用input()
andprint()
def inch_to_cm(value):
return value * 2.54
因为你可以在基于文本的程序(控制台程序)中使用它input()
value = input('inch: ')
value = int(value)
result = inch_to_cm(value)
print(result)
或在命令行中使用参数script.py arguments
value = sys.argv[1]
value = int(value)
result = inch_to_cm(value)
print(result)
或者您可以轻松导入到任何 GUI ( Tkinter
, PyQT
, PyGTK
, Kivy
, 等)
import tkinter as tk
import script # <-- import your function
def convert():
value = inch_entry.get()
value = int(value)
result = script.inch_to_cm(value) # <-- use your function
cm_result['text'] = result
root = tk.Tk()
inch_label = tk.Label(root, text='inch:')
inch_label.grid(row=0, column=0)
inch_entry = tk.Entry(root)
inch_entry.grid(row=0, column=1)
cm_label = tk.Label(root, text='cm:')
cm_label.grid(row=1, column=0)
cm_result = tk.Label(root)
cm_result.grid(row=1, column=1)
button = tk.Button(root, text='Convert', command=convert)
button.grid(row=2, column=0, columnspan=2)
root.mainloop() # it starts program
我认为该文件script.py
就像
import sys
def inch_to_cm(value):
return value * 2.54
if __name__ == '__main__':
if len(sys.argv) > 1:
value = sys.argv[1]
else:
value = input('inch: ')
value = int(value)
result = inch_to_cm(value)
print(result)
它只需要if __name__ == '__main__'
在直接执行时运行一些代码,而不是在导入其他程序时运行。
如果您在函数中没有代码,但您可以运行它,script.py argument
那么您可以使用subprocess运行它并获得结果
result = subprocess.check_output(['python', 'script.py', value])
这样,您可以使用几乎相同的 GUI 使用不同的程序
import tkinter as tk
import subprocess
def convert():
value = inch_entry.get()
result = subprocess.check_output(['python', 'script.py', value])
cm_result['text'] = result.strip()
root = tk.Tk()
inch_label = tk.Label(root, text='inch:')
inch_label.grid(row=0, column=0)
inch_entry = tk.Entry(root)
inch_entry.grid(row=0, column=1)
cm_label = tk.Label(root, text='cm:')
cm_label.grid(row=1, column=0)
cm_result = tk.Label(root)
cm_result.grid(row=1, column=1)
button = tk.Button(root, text='Convert', command=convert)
button.grid(row=2, column=0, columnspan=2)
root.mainloop() # it starts program and display window
如果您使用标准模块argparse在命令行中获取参数,那么有模块可以生成 GUI - Gooey
如果您的代码用于input()
获取数据,那么它可能会产生更大的问题,您可能需要使用其他函数来向其他函数subprocess
发送文本,input()
它可能需要pexpect才能与这种类型的程序一起使用。
推荐阅读
- twig - 在 twig current 中执行 twig var
- python - 如何在 Pytorch 中为我的模型找到混淆矩阵和绘图
- r - 多个滚动分位数的高效计算
- linux - Kubernetes 中是否有任何选项可以在特定的 cgroup 目录中运行 pod?
- stream - 在终止操作中使用流 API 时出现错误
- c# - 您可以从 C# 控制台复制彩色文本吗?
- c# - 在 C# 中反序列化复杂对象
- powershell - 用于跳转到下一个文件夹的 Powershell 命令
- java - 没有可用的“org.springframework.jms.core.JmsTemplate”类型的合格 bean
- javascript - 单击按钮更改背景