下面是一个使用Python绑定编写的基于本教程的最小GTK 4应用程序。它显示一个带有非常长的文本块的窗口:
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会导致一个错误:
TypeError: gobject `__main__+MainWindow' doesn't support property `application'Gtk.ApplicationWindow Gtk.ScrolledWindow**?**的(我添加了pygobject标记,因为它是我的MWE语言,但我认为我的问题与绑定语言无关。)
发布于 2022-07-16 18:32:27
Gtk.ScrolledWindow本身并不是真正的“窗口”,因为大多数人都知道它(它用来映射到非常具体的X11窗口概念)。它是一个小部件,允许您滚动它的子部件。
换句话说,如果您想要一个可以滚动内容的应用程序窗口,您可以用一个Gtk.Label包装您的Gtk.ScrolledWindow,然后将其设置为Gtk.ApplicationWindow的子窗口。
换句话说,您的MainWindow将变成:
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)https://stackoverflow.com/questions/73000992
复制相似问题