首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyGTK TextView问题

PyGTK TextView问题
EN

Stack Overflow用户
提问于 2011-12-09 12:37:10
回答 2查看 1.8K关注 0票数 0

关于PyGTK的TextView小部件,我有两个问题。如何指定TextView的大小,以及如何在TextView中简单地获取和插入文本(而不仅仅是设置文本)?

下面是我的源码:

代码语言:javascript
复制
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

运行上述代码时的输出:

代码语言:javascript
复制
Empty Output

上面这些代码是我从一个更大的代码库中总结出来的核心代码,其中包含问题的要点。

对于Swing,Java有一个“textarea.append(”...“);和"textarea.getText()”。我在PyGTK中找不到任何类似的TextView。

EN

回答 2

Stack Overflow用户

发布于 2011-12-16 12:22:47

在您的代码中,output是方法内部的局部变量,因此始终为None。而且,如果您对self.textbuffer感兴趣,则输出的是TextView。

关于布局,这是通过HBox和VBox这样的容器来处理的。如果您想要手动设置它们,那么您可能希望使用not recommended特殊容器GtkFixed。

HBox (和VBox)的优点是允许应用程序自适应不同的大小、字体大小等。您只需定义它们应该具有的行为,但其他所有内容在运行时都是可适应的。

票数 3
EN

Stack Overflow用户

发布于 2012-02-06 21:19:41

你一定读过The Tutorial吧?

您可以指定整个窗口的(默认)大小,而不是指定TextView的大小:

代码语言:javascript
复制
self.window.set_default_size(500, 800)

追加是我希望更直接的东西。我使用的是:创建一个迭代器到缓冲区的末尾,在那里插入文本,滚动。因此:

代码语言:javascript
复制
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函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8441136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档