2017-06-12 64 views
0

我正在爲我的PyGTK2 GUI編寫單元測試,並且需要檢查顯示在gtk.Statusbar中的文本。該類定義了一個pop()函數,但它不返回任何內容。我如何非破壞性地獲取當前顯示的文字?如何檢查PyGTK狀態欄中的當前文本?

+0

您控制在哪些消息到狀態欄棧,所以你應該跟蹤哪些正在顯示一個pop方法刪除一條消息,如果你一直是。 id。[text-popped](https://developer.gnome.org/pygtk/stable/class-gtkstatusbar.html#signal-gtkstatusbar--text-popped)和[text-push](ht tps://developer.gnome.org/pygtk/stable/class-gtkstatusbar.html#signal-gtkstatusbar--text-pushed)在推送/彈出時爲您提供文本,但實際上是添加/刪除它。 GtkStatusBar不公開包含顯示文本的標籤,因此您必須重新考慮您的方法。 –

回答

1

這應做到:

from gi.repository import Gtk 

class MainWindow(Gtk.Window): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self.connect("destroy", lambda x: Gtk.main_quit()) 

     bigbtn = Gtk.Button("Show elements") 
     bigbtn.connect("clicked", self.on_bigbtn_clicked) 

     self.stat = Gtk.Statusbar() 
     for id, lbl in enumerate(["One", "Two", "Three"]): 
      self.stat.push(id, lbl) 

     vbox = Gtk.VBox() 
     vbox.pack_start(bigbtn, True, True, 0) 
     vbox.pack_start(self.stat, False, False, 0) 

     self.add(vbox) 
     self.show_all() 

    def on_bigbtn_clicked(self, btn): 
     for el in self.stat.get_message_area(): 
      print(el.get_text()) 

    def run(self): 
     Gtk.main() 


def main(args): 
    mainwdw = MainWindow() 
    mainwdw.run() 

    return 0 

if __name__ == '__main__': 
    import sys 
    sys.exit(main(sys.argv)) 

點擊頂部的按鈕將打印當前消息的內容。訣竅是首先訪問Gtk.Box類型的狀態欄message_area。然後,您可以訪問該元素在框中(這是Gtk.Label型的 - 所以,一個get_text()讓你的文字

這是Gtk通過內省,但它的Python 2.你應該能夠修改此。代碼pygtk容易 - 也許只是改變了進口和Gtkgtk

+0

很好,因爲這是測試代碼,我不介意所有的反思 –