2013-01-24 80 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

相關問題