1

ログ解析スクリプトの基本的なGUIを作成しています。GTK 2x、Glade、Python2.7.3を使用しています。

いくつかのグローバル変数を定義しましたが、GUIテキストボックスへのユーザー入力に応じてそれらを変更する必要があります。全体のレイアウトは空き地で作られています。文字列と値をウィジェットからGUIクラス外の関数に渡す方法のヒントはありますか?

空き地ファイルからのサンプルテキストボックス定義:

<child>
      <object class="GtkEntry" id="serverIDtext">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="invisible_char">●&lt;/property>
        <property name="text" translatable="yes">Server name.</property>
        <property name="primary_icon_activatable">False</property>
        <property name="secondary_icon_activatable">False</property>
        <property name="primary_icon_sensitive">True</property>
        <property name="secondary_icon_sensitive">True</property>
      </object>
      <packing>
        <property name="top_attach">2</property>
        <property name="bottom_attach">3</property>
      </packing>
    </child>

GUIクラス:

import pygtk
import gtk
import gtk.glade

from pyParse2 import *

class GUI:
  def __init__(self):    
    builder = gtk.Builder()
    builder.add_from_file("parsergui.glade")
    self.window = builder.get_object("window1")
    builder.connect_signals(self)

  def on_window_destroy(self, widget, data = None):
    gtk.main_quit()

  def parseButton(self, widget, data = None):
    parseLaunch()

MGに従って編集します。アドバイス:私はあなたの最初のアドバイスを試し、次のようなものを準備しました:

import pygtk
import gtk
import gtk.glade

from pyParse2 import *

class GUI:
  def __init__(self):    
    builder = gtk.Builder()
    builder.add_from_file("parsergui.glade")
    self.window = builder.get_object("window1")
    builder.connect_signals(self)
    self.sID = builder.get_object("serverIDtext")

  def on_window_destroy(self, widget, data = None):
    gtk.main_quit()

  def parseButton(self, widget, data = None):
    global serverID
    serverID = self.sID
    print serverID
    parseLaunch()

そしてこれを手に入れました:

<gtk.Entry object at 0x2a97a58 (GtkEntry at 0x20e9118)>

私はそれを理解しているので(そしておそらく私は間違っています)、get_textを使用することはできませんが、文字列を返さないget_objectを実行する必要があります。これを回避する方法はありますか?

O_O

4

2 に答える 2

0

ウィンドウの場合と同じように、Builderクラスからエントリにアクセスできます。

# in __init__
self.entry = builder.get_object('serverIDtext')

別の方法もありますが、バグの原因や、それがどのように機能するか、またはどのように機能するかについての誤解があり、それを機能させるには少しテストが必要です。基本的に、User dataパラメータを介してテキストボックスの参照をハンドラに渡すことができます。parseButtonハンドラーをシグナルに関連付けるときの空き地でUser data、をテキストボックスに設定します。widgetここで注意が必要なのは、テキストボックスがパラメータとして渡されたのか、dataパラメータとして渡されたのか、Swapチェックボックスがこの動作を制御するのかを覚えていないことです。

テキストボックスへの参照がある場合、メソッドを呼び出す文字列を簡単に取得できますget_text()

于 2013-01-24T09:41:27.493 に答える
0

ウィジェットに名前を付ける必要があります。

global foo_widget
foo_widget = application.get_widget('foo')

GUIビルダーでウィジェットの名前が「foo」の場合。

次に、を使用してユーザー指定の値を取得できます

foo_value = foo_widget.get_text()

ドキュメントはここにあります。

于 2013-01-24T09:37:04.633 に答える