如何将基于文本的程序制作成GUI?特金特是关键吗?

2024-05-20 13:33:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我即将完成我的第一个Python项目。它是一个基于文本的程序,用于转换公制和标准单位。我可以用什么把程序变成GUI程序。我已经调查过特金特了。然而,我不确定这是否是解决我这种情况的最好办法。我希望您能给我一点指导,因为我对编程非常陌生


Tags: 项目文本程序编程情况gui指导公制
2条回答

如果函数中有代码可以获取值并返回结果,而不使用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(TkinterPyQTPyGTKKivy,等等)

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

Tkinker是一种向程序添加GUI的简单方法,您实际上可以创建一些好看的界面,所以如果我是您,我会使用Tkinter

相关问题 更多 >