2017-07-13 3 views
1

私はGUIを使ってPythonプログラムを作成しています。私は私が作成したチュートリアルにPyCharmでのpython 2.7のプロジェクトを作成し、それに基づきましGladeで作成したインターフェイスをテストするための単純なプログラムをPythonで作成するには?

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Generated with glade 3.20.0 --> 
<interface> 
    <requires lib="gtk+" version="3.20"/> 
    <object class="GtkWindow"> 
    <property name="can_focus">False</property> 
    <child> 
     <object class="GtkNotebook"> 
     <property name="visible">True</property> 
     <property name="can_focus">True</property> 
     <child> 
      <object class="GtkLayout"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <child> 
       <object class="GtkLabel"> 
       <property name="width_request">100</property> 
       <property name="height_request">80</property> 
       <property name="visible">True</property> 
       <property name="can_focus">False</property> 
       <property name="label" translatable="yes">label</property> 
       </object> 
       <packing> 
       <property name="x">158</property> 
       </packing> 
      </child> 
      <child> 
       <object class="GtkButton" id="btnOne"> 
       <property name="label" translatable="yes">One</property> 
       <property name="width_request">160</property> 
       <property name="height_request">34</property> 
       <property name="visible">True</property> 
       <property name="can_focus">True</property> 
       <property name="receives_default">True</property> 
       <property name="margin_right">1</property> 
       <property name="action_name">btnOneAction</property> 
       </object> 
       <packing> 
       <property name="x">126</property> 
       <property name="y">56</property> 
       </packing> 
      </child> 
      </object> 
     </child> 
     <child type="tab"> 
      <object class="GtkLabel"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">One</property> 
      </object> 
      <packing> 
      <property name="tab_fill">False</property> 
      </packing> 
     </child> 
     <child> 
      <placeholder/> 
     </child> 
     <child type="tab"> 
      <object class="GtkLabel"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">page 2</property> 
      </object> 
      <packing> 
      <property name="position">1</property> 
      <property name="tab_fill">False</property> 
      </packing> 
     </child> 
     <child> 
      <placeholder/> 
     </child> 
     <child type="tab"> 
      <placeholder/> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 

:グレードは、Mac上で動作するように取得しようと数時間程度過ごした後、私はようやく私の最初の.gladeファイルを作成しましたインターフェイスでプログラムを試してみて、実行するには、次の.pyファイル:

#!/usr/bin/env python 

import sys 

try: 
    import pygtk 
    pygtk.require("2.0") 
except: 
    pass 
try: 
    import gtk 
    import gtk.glade 
except: 
    sys.exit(1) 


class main: 
    """This is an Hello World GTK application""" 

    def __init__(self): 
     # Set the Glade file 
     self.gladefile = "gui.glade" 
     self.wTree = gtk.glade.XML(self.gladefile) 

     # Create our dictionay and connect it 
     dic = {"on_btnHelloWorld_clicked": self.btnHelloWorld_clicked, 
       "on_MainWindow_destroy": gtk.main_quit} 
     self.wTree.signal_autoconnect(dic) 

    def btnHelloWorld_clicked(self, widget): 
     print("Hello World!") 


if __name__ == "__main__": 
    hwg = main() 
    gtk.main() 

残念ながら、私は本当にコードを理解していない、と私はそれを実行したときに起こることすべてが、コンソール出力である「Process finished with exit code 1

したがって、エラーはありませんが、私はまだプログラムを実行して、私が構築したインターフェースを見ることができません。

.gladeファイル(gui.glade)は、既にプロジェクトにインポートされている点に注意してください、この.pyファイル(main.py)と同じディレクトリにあります。

ビルドしてインポートしたG​​ladeインターフェイスを使用するPyCharmでプログラムを作成するだけです。この段階ではPyCharmを実行するときの方法を理解する必要がありますmain.py、私のインターフェイスが表示されます。

すべての、感謝

+0

デバッグの素晴らしい世界へようこそ。 PyCharmにはデバッガがあります。それをオンにし、失敗するまであなたのコードを歩いてください。 – nanotek

答えて

1

ファーストを助けてください、あなたはグレイド3.20を使用して、あなたのpythonファイルにPyGTKのを輸入しています。 PyGtkはGtk + 2.0を対象とし、Gtk + 3.0を使用するにはPyGObjectを使用する必要があります。

Gladeを使用するときは、取得する予定のウィジェットにIDを渡す必要があります(これを行うと簡単になります)。

これは言われている

は、私は空き地ファイルであなたのGtk.WindowにIDを追加しました:

... 
<object class="GtkWindow" id="window1"> 
... 

することができます下のコードを使用して、簡単に、レイアウトをテストします。ちょうどあなたが使用したものは何でも空き地ファイル名(gui.glade)に変更します。

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 

builder = Gtk.Builder() 
builder.add_from_file("gui.glade") 

window = builder.get_object("window1") 
window.connect("destroy", Gtk.main_quit) 
window.show_all() 

Gtk.main() 

を結果は次のようになります。

enter image description here

関連する問題