Interfaz GUI del libro de cocina para una secuencia de comandos de línea de comandos

Tengo una secuencia de comandos de Python de línea de comandos que funciona bien para convertir un tipo de archivo en otro dado unos pocos parámetros y ahora me gustaría implementar esto en algunos de mis colegas que pueden no saber qué es una línea de comandos.

Podría trabajar durante horas tratando de determinar qué kit de herramientas de la GUI de Python es “el mejor” y luego aprender a hacer lo que necesito, pero parece que esto se habría hecho antes.

¿Hay un método de libro de cocina relativamente para GUIificar mi progtwig? La dirección de algún tipo de lección / tutorial o de un progtwig conciso, documentado y existente sería excelente.

Solo un ejemplo rápido y simple que puede enseñarle suficiente wxPython para comenzar:

import wx from subprocess import Popen, PIPE class MainWindow(wx.Frame): def __init__(self, *args, **kwargs): wx.Frame.__init__(self, *args, **kwargs) self.panel = wx.Panel(self) self.button = wx.Button(self.panel, label="Run!") self.command = wx.TextCtrl(self.panel) self.result = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.command, 0, wx.EXPAND) self.sizer.Add(self.button, 0, wx.EXPAND) self.sizer.Add(self.result, 1, wx.EXPAND) self.command.SetValue("dir") self.button.Bind(wx.EVT_BUTTON, self.CallCommand) self.panel.SetSizerAndFit(self.sizer) self.Show() def CallCommand(self, e): p = Popen(self.command.GetValue(), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) r = p.communicate() self.result.SetValue(r[0]) app = wx.App(False) win = MainWindow(None) app.MainLoop() 

Para completar el ejemplo, el siguiente código ejecuta la línea de comandos en otro hilo y muestra el resultado línea por línea:

 import wx from wx.lib.delayedresult import startWorker from subprocess import Popen, PIPE class MainWindow(wx.Frame): def __init__(self, *args, **kwargs): wx.Frame.__init__(self, *args, **kwargs) self.panel = wx.Panel(self) self.button = wx.Button(self.panel, label="Run!") self.command = wx.TextCtrl(self.panel) self.result = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.command, 0, wx.EXPAND) self.sizer.Add(self.button, 0, wx.EXPAND) self.sizer.Add(self.result, 1, wx.EXPAND) self.command.SetValue("dir") self.button.Bind(wx.EVT_BUTTON, self.CallCommand) self.panel.SetSizerAndFit(self.sizer) self.Show() def CallCommand(self, e): startWorker(self.WorkCommandDone, self.WorkCommand) def WorkCommand(self): self.button.Disable() p = Popen(self.command.GetValue(), shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE) while True: line = p.stdout.readline() if line != '': wx.CallAfter(self.result.AppendText, line) else: break def WorkCommandDone(self, result): self.button.Enable() app = wx.App(False) win = MainWindow(None) app.MainLoop() 

Hay algunas respuestas que abogan por wxpython. Sin embargo, cualquier kit de herramientas funcionará para este proyecto. Tkinter tiene el beneficio adicional de que usted y sus colegas ya lo tienen instalado y es muy fácil de usar.

Dicho esto, los otros kits de herramientas son más o menos fáciles de usar, pero es posible que tengas que saltar a través de un aro o dos para instalarlos. Si la instalación no es un problema, no importará cuál elija.

Desafortunadamente, decirle cómo “GUIJAR” su progtwig es difícil ya que no sabemos nada sobre su aplicación. Probablemente todo lo que involucre es colocar algunas tags y widgets de entrada, luego crear un botón que recopile todos los datos y luego ejecute su progtwig con el módulo de subproceso.

Básicamente, solo necesitas averiguar qué widgets mantendrán los datos que deseas lo mejor. Sospecho que podrías usar un par de cuadros combinados para mantener diferentes conjuntos de extensiones. O simplemente puedes usar las cadenas de nombre de ruta para descubrirlo. Presione un botón y ejecute el proceso de conversión, probablemente en otro subproceso para que la GUI siga respondiendo.

Estoy predispuesto por wxPython. Sin embargo, es mejor que eche un vistazo a sus demostraciones y documentación y vea qué kit de herramientas de GUI se adapta mejor a su cerebro.

Esto depende principalmente de su necesidad. Si su necesidad es simple, puede ir con tkinter que se incluye con Python. Si usa esto, no confiará en una biblioteca de terceros para implementar su GUI. Ya que desea que esto esté disponible para sus colegas, esto podría ser más fácil de comstackr con py2exe u otros elementos similares a exe, lo que podría ser complicado si usa una biblioteca de terceros para GUI. Sin embargo, si desea agregar más funcionalidad a su GUI, wxpython / pyqt / pyGTK es el kit de herramientas de GUI que debe buscar. Personalmente, prefiero wxpython debido a su naturaleza multiplataforma, pero pyqt y pyGTK también son igual de buenos que yo he oído.