Windowsのプログラムを起動する
wxPythonで作成したGUI画面から、windowsのプログラムを選択して起動するテスト。
popen2モジュールを使って昔、同様のことをしていたので思い出しつつ、ちゃんと動くかやってみる。GUI画面はやっつけで下のようにしてみた。
「選択」ボタンを押すとファイルダイアログが開くので、プログラムファイル(拡張子がexeのファイル)をまず選択する。次に「起動」ボタンを押すと、選択したプログラムがスタートする。「選択」した時点でプログラムファイルの絶対パスが得られるが、これをそのままpopen2.popen3の引数で渡してもうまくいかなかった。絶対パスは、ダブルコーテーションで前後を囲まなければいけないようだ。コマンドプロンプトでテストしてやっと分かった。
windowsプログラムは起動できるが、このGUI画面はなんか不安定だ。マウスでGUI画面を移動させると、下のように画面の軌跡が残る。以前もこんなことがあった記憶があるようなないような。やはり書き方が悪いのかな。py2exeでモジュール化すればこんなことは起こらなくなるので、まあいいか。いや、よくない。
以下、今回のソース。
# coding: utf-8 import wx import sys import popen2 class MainFrame(wx.Frame): def __init__(self, id, title): width, height = 300, 100 wx.Frame.__init__(self, id, title=u"プログラムを起動する", size=wx.Size(width, height)) self.Pan = wx.Panel(self, -1) Hsizer = wx.BoxSizer(wx.HORIZONTAL) Vsizer = wx.BoxSizer(wx.VERTICAL) self.RBtn0 = wx.Button(self.Pan, -1, u"選択") self.RBtn1 = wx.Button(self.Pan, -1, u"起動") self.RBtn0.Bind(wx.EVT_BUTTON, self.selectProgram) self.RBtn1.Bind(wx.EVT_BUTTON, self.startProgram) Hsizer.Add(self.RBtn0, 0, wx.ALL, 2) Hsizer.Add(self.RBtn1, 0, wx.ALL, 2) self.Pan.SetSizer(Hsizer) Hsizer.Fit(self.Pan) def selectProgram(self, event): dlg = wx.FileDialog(self, message="Please choose program") ansBtn = dlg.ShowModal() self.ProgName = '"'+dlg.GetPath()+'"' if ansBtn == wx.ID_OK: pass dlg.Destroy() def startProgram(self, inputZipCode): popen2.popen3(self.ProgName) print self.ProgName class Application(wx.App): def OnInit(self): frame = MainFrame(None, -1) frame.Show(True) self.SetTopWindow(frame) return True app = Application() app.MainLoop()