如何将字符串从文本框传递给函数

时间:2013-01-24 08:54:01

标签: python python-2.7 gtk glade

我正在为我的日志解析脚本编写一个基本的gui。我使用的是GTK 2x,Glade和Python 2.7.3。

我定义了一些全局变量,需要根据gui文本框中的用户输入更改这些变量。整个布局是在林间空地。如何将小部件中的字符串和值传递给GUI类之外的函数?

glade文件中的示例文本框定义:

<child>
      <object class="GtkEntry" id="serverIDtext">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="invisible_char">●</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

2 个答案:

答案 0 :(得分:0)

您必须为小部件命名,

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

如果您的窗口小部件在GUI构建器中命名为“foo”。

然后,您可以使用

检索用户给定的值
foo_value = foo_widget.get_text()

可以找到文档here

答案 1 :(得分:0)

您可以像使用窗口一样访问Builder类的条目。

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

还有另一种选择,但是导致错误或误解的原因是什么,或者它应该如何工作,需要一些测试来使其工作。基本上,您可以通过User data参数将文本框的引用传递给处理程序。在将parseButton处理程序与信号关联时,在林间空地中,将User data设置为文本框。现在是棘手的部分:我不记得文本框是作为widget参数传递还是data参数传递而Swap复选框控制了这种行为。

如果您对文本框有引用,则可以轻松检索调用get_text()方法的字符串。