使用wx python编写GUI脚本。我需要的是加载另一个python文件并运行使用GUI为python文件的变量提供输入(值)的选项。并显示python文件的结果。 我能够加载文件需要运行....
答案 0 :(得分:0)
以下是我GooeyPi application.的一些代码。它是PyInstaller的GUI前端。它使用一些标志运行pyinstaller.py
代码,并将输出发送到textctrl
小部件。它使用wx.Yield
来避免锁定接口,尽管将代码移动到自己的线程是另一种选择。
class GooeyPi(wx.Frame):
def __init__(self, *args, **kwargs):
super(GooeyPi, self).__init__(*args, **kwargs)
...
# Results go in here. Read only style so people can't write in it.
self.txtresults = wx.TextCtrl(self.panel, size=(420,200),
style=wx.TE_MULTILINE|wx.TE_READONLY)
def OnSubmit(self, e):
...
# getflags returns something like ['python.exe', 'pyinstaller.py' '--someflag' '--someotherflag']
flags = util.getflags(self.fbb.GetValue())
logging.debug('calling subprocess {}'.format(flags))
for line in self.CallInstaller(flags):
self.txtresults.AppendText(line)
def CallInstaller(self, flags):
' Generator function, yields on every line in output of command
p = subprocess.Popen(flags, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while(True):
retcode = p.poll()
line = p.stdout.readline()
wx.Yield() # Prevent GUI from freezing
yield line
if(retcode is not None):
yield ("Pyinstaller returned return code: {}".format(retcode))
break
我的getflags函数供参考。它使用sys.executable
来查找python二进制文件的路径,使用os.path.join
来查找要运行的python脚本的路径。然后它会根据我的配置文件附加一些标志。然后返回结果列表。
def getflags(fname):
flags=[]
flags.append(sys.executable) # Python executable to run pyinstaller
flags.append(os.path.join(config['pyidir'], 'pyinstaller.py'))
if config['noconfirm']:
flags.append('--noconfirm')
if config['singlefile']:
flags.append('--onefile')
if config['ascii']:
flags.append('--ascii')
if config['windowed']:
flags.append('--noconsole')
if config['upxdir'] != '':
flags.append('--upx-dir=' + config['upxdir'])
if pyversion(config['pyidir']) == 2.1:
flags.append('--distpath=' + os.path.dirname(fname))
else:
flags.append('--out=' + os.path.dirname(fname))
flags.append(fname)
return(flags)