我对PyGTK的TextView小部件有两个问题。如何指定TextView的大小以及如何简单地将文本(而不仅仅是设置文本)插入到TextView中?
以下是我的源代码:
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
运行上述代码时的输出:
Empty Output
以上这些代码是我从更大的代码库中总结的核心代码,其中包含问题的基本要素。
Java有一个“textarea.append(”...“);”和“textarea.getText()”for Swing。我在PyGTK中找不到任何类似的TextView。
答案 0 :(得分:3)
在您的代码中, output 是方法内的局部变量,因此始终为None。 此外,输出是TextView,您对 self.textbuffer 感兴趣。
关于布局,这是使用HBox和VBox等容器处理的。如果你 想要手动设置它们,那么您可能想要使用不推荐特殊 容器GtkFixed。
HBox(和VBox)的优点是允许应用程序适应不同的大小,字体大小等。您只需要定义它们应该具有的行为,但其他所有内容都将在运行时适应。
答案 1 :(得分: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中还有一些get函数。