【问题标题】:GUI Interface For Command Line Input/Output用于命令行输入/输出的 GUI 界面
【发布时间】:2018-03-11 01:14:38
【问题描述】:

我希望有人能为我想做的项目指明正确的方向。我的意图很简单,拥有一个允许用户输入字符串的 GUI,该字符串填充到预先确定的命令行文本行中,通过命令行运行并返回命令行屏幕上打印的内容。我一直倾向于为此使用 Python,但我仍然不确定即使是第一部分也能完成的语法,其中用户将输入一个字符串并且该字符串将贯穿命令行文本行。任何形式的输入将不胜感激!

【问题讨论】:

  • python 2 还是 3? .
  • 我真的不确定,我是 python 世界的新手。对于这个项目,一个会比另一个更好吗?
  • 您可以使用python 3。通过在命令行中输入python -V来检查您的python版本
  • 看来我目前安装了 2.7.10。如果 3 更好,我可以换上那个。
  • 在某些平台上,python 始终是 Py2,如果安装了 Py3,则该命令是 python3。如果您才刚刚开始,请绝对以 Py3 为目标。

标签: python command-line-interface


【解决方案1】:

这是一个使用 tkinter for python 的简单 GUI

try:
    import tkinter as tk        # python v3
except:
    import Tkinter as tk        # python v2

# This function is called when the submit button is clicked
def submit_callback(input_entry):
    print("User entered : " + input_entry.get())
    return None


#######################  GUI ###########################
root = tk.Tk()
root.geometry('300x150')       #Set window size

# Heading
heading = tk.Label(root, text="A simple GUI")
heading.place(x = 100, y = 0)


input_label = tk.Label(root, text="Enter some text")
input_label.place(x = 0, y = 50)

input_entry = tk.Entry(root)
input_entry.place(x = 100, y = 50)


submit_button = tk.Button(root, text = "Submit", command = lambda: submit_callback(input_entry))
submit_button.place(x = 200, y = 90)
root.mainloop()
#############################################################

【讨论】:

    【解决方案2】:

    对于 Python 初学者来说,开发一个 GUI 是一个大项目,有几种可能性可以做到这一点。如果您想用 Python 认真开发 GUI 应用程序,我建议您通过 pyside 或 pyqt 尝试 Qt4 或 Qt5。您可能需要一个或多个教程,并且可能需要一些问题来获得您的第一个工作 GUI 应用程序,但您将能够使用此库构建任何类型的专业跨平台应用程序。

    运行命令行文本是指系统命令还是 python 命令?如果你想运行系统命令,我建议你编写一个简短的 python 脚本,处理用户输入(在 python 命令行中)并使用子进程(from subprocess import call)将其传递给系统。

    如果您在 pyqt 中完成了第一个简单的文本表单,并且处理用户输入的脚本尝试通过将 Qt 应用程序包装在命令行脚本周围来连接它们。如果您只是在寻找一个快速而肮脏的解决方案,那么有几个库支持一些易于设置的 GUI 框架或 Web 界面(在本地机器上的浏览器中运行)。但是,如果您是编程初学者,我强烈建议您将其拆分为两个或三个小项目,以保持较低的挫败感;)。

    编辑 Python2 与 Python3:pyqt 和 pyside 可用于 python2 和 python3(作为大多数库,但不是所有库),因此您可以自行选择 py2 和 py3。语法几乎相同(除了 print() 命令),但您安装的库仅在您安装它们的版本中工作。 如果您在 linux 机器上工作,您可以轻松地并行安装两个版本,如果您想确保调用正确的版本,您可以指定诸如 python2python3 之类的命令,而不是使用 python 运行默认值

    Edit2 处理用户输入:

    from subprocess import check_output
    
    def predefined_command(user_input):
        command = ['net', 'user', '/domain', user_input]
        answer = check_output(command, args)
        decoded = answer.decode('utf8')
        return answer
    

    【讨论】:

    • 我的目标是从像 (xxxxxx) 这样的用户那里获取输入,然后输入一个预先确定的字符串,用于读取“net user /domain xxxxxx”的命令行命令。然后,这会吐出一堆关于用户的信息,然后我想在 GUI 中而不是在命令提示符中显示这些信息。我希望这更有意义。
    • 如果你想使用 tkinter,你可以使用 Stack 发布的代码(这可能比使用 pyqt 快一点)。要运行该命令,您可以在回调处理程序中使用您自己的函数而不是 print('user input: ...')。我将通过编辑我的答案来举例说明。
    • 对于 3.6 及更高版本,您需要 subprocess.run()
    • 是的,run() 方法是在 3.5 或 3.6 中添加的,但与直接返回输出而无需使用 Pipes 或其他任何东西捕获它的 check_output() 方法相比有什么优势?跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多