2011-12-09 6 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 ("... ");" Swing에 대해서는 "textarea.getText()"를 사용하십시오. PyGTK에서 TextView와 비슷한 것을 찾을 수 없습니다.

+0

'self.buffer = self.output.get_buffer()'및 'self.buffer.insert_at_cursor (text)'를 사용하여 텍스트를 삽입하는 방법을 생각해 냈습니다. – thotheolh

+0

확장 (확장 = True) 및 채우기 (채우기 = True)를 허용하는 TextView 구성 요소가 포함 된 HBox를 만들면 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 또한 텍스트를 가져올 수 있습니다. 에는 몇 가지 기능이 있습니다.

관련 문제