如何解决如何将基于文本的程序制作为GUI? tkinter是关键吗?
我正在完成我的第一个Python项目。它是基于文本的程序,可转换度量单位和标准单位。我可以使用什么将程序转换为GUI程序。我调查了tkinter。但是,我不确定这是否是适合我的情况的最佳解决方案。我将不胜感激,因为我真的是编程新手。
解决方法
如果您的函数中有代码可以获取值并返回结果-最好不使用input()
和print()
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__'
才需要运行某些代码,而在导入到其他程序中时则不需要。{p>
如果函数中没有代码,但是可以以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',value])
cm_result['text'] = result.strip()
root = tk.Tk()
inch_label = tk.Label(root,columnspan=2)
root.mainloop() # it starts program and display window
如果您使用标准模块argparse在命令行中获取参数,则可以使用模块来生成GUI- Gooey
如果您的代码使用input()
来获取数据,那么这可能会带来更大的问题,您可能需要使用subprocess
中的其他函数将文本发送到input()
,否则可能需要{{3 }}可以使用这种程序。
Tkinker是一种将GUI添加到程序中的简单方法,实际上您可以创建一些美观的界面,因此,如果我是我,我会使用Tkinter。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。