pywinautoで遊んでみたいと思っています。簡単なプロジェクトでWindowsペイントを自動化することができます。これは、私が予想していたよりも厄介であることが判明しました。pywinauto Windowsペイントでテストする
は、これまでのところ、私はこのコードを持っている:
は、私は[プロパティ]メニュー項目は、ここに示されている開こうとしたい
from pywinauto.application import Application
import pywinauto
app = Application(backend='uia')
p = pywinauto.findwindows.find_element(title_re=".* - Paint")
app.connect(handle=p.handle)
dlg = app.window(title_re=".* - Paint")
dlg.File_tab.click()
このコードは、既存のオープンペイントウィンドウに接続し、ファイルタブを開きます。そこから、実際に「プロパティ」をクリックする方法がわかりません。私は "dlg.Properties.click()"のような単純なものはうまくいくと思っていましたが、それはElementNotFoundエラーです。
私はgithubのページはここでペイントの自動化のためのいくつかのサンプルコードを持っていることがわかった: https://github.com/pywinauto/pywinauto/blob/master/examples/mspaint.py
例ではライン32を見ることによって、私は、彼らがchildwindowを呼び出し、それを呼び出すことにより、メニューの項目にアクセスできることを確認することができます。 githubの例の32行目には、次のように書いてあります。
dlg.child_window(title='Open', control_type='MenuItem', found_index=0).invoke()
私はそれを完全に理解していません。それは、ファイルタブをクリックすると新しい「子ウィンドウ」が開くということですか?私が持っているもう一つの質問は、何かをクリックして対何をクリックするのですか?
私はgithubの例からコードを使用しようとしましたが、それを動作させる方法がわかりません。 githubの例は、ファイルタブから "開く"オプションを実行します。
私の代わりに、このような「オープン」のgithubのと使用し、「プロパティ」からのラインを適応させることを試みた:
dlg.child_window(title='Properties', control_type='MenuItem', found_index=0).invoke()
実際に私はそれをしようとするとクラッシュするペイントの原因となります。
pywinautoからコントロール識別子を印刷すると、コントロールのリストに「プロパティ」メニュー項目が表示されます。それは次のようになります。
のMenuItem - 'プロパティ'(L1、T476、R254、B531) [ 'PropertiesMenuItem'、 'MenuItem6'、 'プロパティ'] child_window(タイトル= "プロパティ"、制御タイプ= "MenuItem")
メニュー項目に正しくアクセスするにはどうすればよいですか?
'invoke'は、コントロールのデフォルトアクションを表す、いわゆるInvokePatternを使用します。私たちは別の意味を持つかもしれないので、その名前を「呼び出し」としておくことにしました。私たちはボタンコントロールのエイリアスとして 'click'メソッドを使用します。 –