2013-01-24 48 views
1

我正在为我的日志分析脚本编写一个基本的gui。我使用GTK 2x,Glade和Python 2.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">●</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

'self.sID'是一个'GtkEntry'。您需要调用'self.sID.get_text()'获取'GtkEntry'内的文本。 – liberforce

+0

我试着调用self.sID.get_text(),但我应该在哪里调用它?正如我看到的,我应该首先get_object,因为我已经有了,然后调用self.sID.get_text()来获取Entry的值,对吧? – panta

+0

哈!有用。现在只需将值传递给其他函数,这太棒了!非常感谢liberforce! – panta

回答

0

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

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

有一种替代而是一种错误的原因或它如何工作的,或者它应该如何工作,需要一点点的测试,使其工作有误解。基本上,您可以通过参数User data将文本框的引用传递给处理程序。当您将parseButton处理程序与某个信号相关联时,在林间空地中,将User data设置为文本框。现在棘手的部分:我不记得文本框是否通过widget参数或data参数和Swap复选框控制此行为。

当你有一个文本框的引用,你可以很容易地检索到调用get_text()方法的字符串。

+0

感谢您的输入MG。我已经尝试了你的第一个提议,最终陷入了get_object的问题。编辑问题以反映我所做的更改。 – panta

0

你必须命名您的窗口小部件,

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

如果你的控件在GUI生成器命名为 '富'。

然后,您可以使用

foo_value = foo_widget.get_text() 

文档检索用户给定的值,可以发现here

相关问题