首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GTK4 ApplicationWindow,也是ScrolledWindow?

GTK4 ApplicationWindow,也是ScrolledWindow?
EN

Stack Overflow用户
提问于 2022-07-16 01:42:59
回答 1查看 102关注 0票数 0

下面是一个使用Python绑定编写的基于本教程的最小GTK 4应用程序。它显示一个带有非常长的文本块的窗口:

代码语言:javascript
复制
import sys
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw


class MainWindow(Gtk.ApplicationWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        long_label = Gtk.Label.new("Here is a very long chunk of text.\n" * 100)
        self.set_child(long_label)

class MyApp(Adw.Application):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.connect('activate', self.on_activate)

    def on_activate(self, app):
        self.win = MainWindow(application=app)
        self.win.present()

if __name__ == "__main__":
    app = MyApp(application_id="com.example.GtkApplication")
    app.run(sys.argv)

本教程将Gtk.ApplicationWindow类用于MainWindow,它允许您在主函数和其他方便的特性中设置application_id

但是,默认的Gtk.ApplicationWindow不包括滚动条。与手工构建一个窗口相比,最好的方法是使我的主窗口成为Gtk.ScrolledWindow的一个实例,文档化的这里,它允许您在较高的级别上指定滚动行为等等。

不幸的是,删除Gtk.ScrolledWindow代替Gtk.ApplicationWindow会导致一个错误:

代码语言:javascript
复制
TypeError: gobject `__main__+MainWindow' doesn't support property `application'
  • 是否有一种方法可以创建一个同样是Gtk.ApplicationWindow Gtk.ScrolledWindow**?**的
  • 如果不是,在我的主窗口中获得滚动条的最佳方法是什么?‘

(我添加了pygobject标记,因为它是我的MWE语言,但我认为我的问题与绑定语言无关。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-16 18:32:27

Gtk.ScrolledWindow本身并不是真正的“窗口”,因为大多数人都知道它(它用来映射到非常具体的X11窗口概念)。它是一个小部件,允许您滚动它的子部件。

换句话说,如果您想要一个可以滚动内容的应用程序窗口,您可以用一个Gtk.Label包装您的Gtk.ScrolledWindow,然后将其设置为Gtk.ApplicationWindow的子窗口。

换句话说,您的MainWindow将变成:

代码语言:javascript
复制
class MainWindow(Gtk.ApplicationWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        long_label = Gtk.Label(label=("Here is a very long chunk of text.\n" * 100))

        # Wrap a scrolled window around it
        scrolled = Gtk.ScrolledWindow()
        scrolled.set_child(long_label)

        # Set it as the main child of the window
        self.set_child(scrolled)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73000992

复制
相关文章

相似问题

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