2011-12-09 54 views
0

我有兩個關於PyGTK的TextView小部件的問題。我如何規定TextView的大小,以及如何簡單地將文本(不僅僅是設置文本)插入到TextView中?PyGTK TextView問題

下面是我的源代碼:上述

Empty Output 

這些代碼是,我已經從包含要領到一個更大的代碼庫中總結的核心代碼:在運行上述代碼時

import sys 

importStatus = False 
output = None 

try: 
    import pygtk 
    pygtk.require('2.0') 
    import gtk 
    importStatus = True 

except ImportError: 
    print "PyGTK module does not exist. Can't launch GUI !" 
    print "Please download and install GTK and PyGTK." 
    importStatus = False 

if importStatus: 

    class gtkGUI(): 

     def __init__(self): 
      print "gtkGUI imported" 
      self.startGUI() 

     def startGUI(self): 
      print "GUI Started" 
      self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
      self.window.set_border_width(10) 

      ## Buttons 
      self.btn = gtk.Button("Press me !") 

      ## Text View with frame wrapping 
      self.page_size = gtk.Adjustment(lower=100, page_size=100) 
      self.sw = gtk.ScrolledWindow(self.page_size) 
      self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
      output = gtk.TextView() 
      self.textbuffer = output.get_buffer() 
      output.set_wrap_mode(gtk.WRAP_WORD) 
      output.set_editable(False) 
      self.sw.add(output) 
      self.frame = gtk.Frame() 
      self.frame.set_label(" Result: ") 
      self.frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT) 
      self.frame.add(self.sw) 

      ## Packing widgets into window 

      # Vertical box to contain all boxes 
      self.vbox = gtk.VBox(homogeneous=False, spacing=0) 

      # Output View 
      self.vbox.pack_start(self.frame, expand=False, fill=False, padding=5) 

      # Adding button to window 
      self.box = gtk.HBox(homogeneous=False, spacing=0) 
      self.box.pack_end(self.btn, expand=False, fill=False, padding=5) 
      self.vbox.pack_start(self.box, expand=False, fill=False, padding=5) 

      ## Presenting window 
      self.window.add(self.vbox) 
      self.window.show_all() 
      gtk.main() 
      self.insertText("helloworld") 
      return None 

     def insertText(self, text): 
      if(output == None): 
       print "Empty Output" 
      else: 
       print "inserting - " + output 

輸出問題。

Java有一個「textarea.append(」...「);」和「textarea.getText()」爲Swing。我在PyGTK中找不到與TextView類似的東西。

+0

我想通過使用'self.buffer = self.output.get_buffer()'然後'self.buffer.insert_at_cursor(text)'插入文本。 – thotheolh

+0

我設法通過使包含TextView組件的HBox允許展開(expand = True)和填充(fill = True)來改變TextView的大小,但根本的問題是如何在沒有TextView組件的情況下移動TextView組件的大小依靠HBox還是一些佈局? – thotheolh

回答

3

在你的代碼中,輸出是方法內部的一個局部變量,因此總是爲None。 另外,輸出是TextView,你有興趣self.textbuffer

關於佈局,這是用像HBox和VBox這樣的容器來處理的。如果你想 想手動設置它們,那麼你可能要使用不建議專用 容器GtkFixed。

HBox(和VBox)的優點是允許應用程序適應不同的大小,字體大小等等。您只需要定義哪些是他們應該擁有的行爲,但其他一切都可以在運行時自適應。

2

您確定您已經閱讀The Tutorial

而是口授TextView的大小,你可能會決定整個窗口的(默認)大小:

self.window.set_default_size(500, 800) 

附加的東西我本來希望更簡單。我用過的是:創建一個迭代器到緩衝區結束,在那裏插入文本,滾動。因此:

t = "text to append" 
ti = self.mybuffer.get_end_iter() 
self.mybuffer.insert(ti, t) 
self.myview.scroll_to_iter(ti, 0.1) 

Iterators也允許獲取文本。 TextBuffer也有一些功能。