我正在为我的日志解析脚本编写一个基本的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
答案 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()
方法的字符串。