【python】使用GtkPaned的程序

一、GTK小部件(widgets)

GTK(GIMP Toolkit)是一种广泛使用的图形用户界面工具包,用于创建跨平台的GUI应用程序。它提供了许多构建用户界面的控件,称为"小部件"(widgets)。以下是GTK中可用的一些基本和常见小部件:
1. GtkWindow: 顶层窗口,用于包含其他小部件。
2. GtkButton: 按钮,用户可以点击执行动作。
3. GtkLabel: 显示文本或图标。
4. GtkEntry: 单行文本输入框。
5. GtkTextView: 多行文本编辑控件。
6. GtkComboBox: 下拉列表,允许用户从一系列选项中选择。
7. GtkCheckButton: 复选框,用户可选取或清除。
8. GtkRadioButton: 单选按钮,通常用于一组互斥的选择中。
9. GtkListBox: 用于表示列表数据的列表框。
10. GtkTreeView: 用于显示分层数据或列表数据的树形视图。
11. GtkNotebook: 标签页,它可以有多个子页签,用户可以切换。
12. GtkMenuBar: 菜单栏,通常位于窗口的顶部。
13. GtkMenu: 菜单,可以包含多个菜单项。
14. GtkMenuItem: 菜单项,用户点击执行动作。
15. GtkToolbar: 工具栏,携带按钮或其他控件,快速访问程序功能。
16. GtkStatusbar: 状态栏,显示状态信息或帮助文本。
17. GtkScrolledWindow: 带有滚动条的窗口,用于包含需要滚动的小部件。
18. GtkFrame: 框架,可用于在小部件周围放置边框。
19. GtkPaned: 分隔面板,允许用户调整子小部件的大小。
20. GtkDialog: 对话框,用于临时收集用户输入。
21. GtkScale: 滑动条,允许用户通过滑块选择一个值。
22. GtkProgressBar: 进度条,表明某个任务的完成进度。
23. GtkSpinner: 转动的动画,显示正在进行的活动。
24. GtkImage: 用于显示图像。
25. GtkFileChooser: 文件选择器,用户可以通过它选择文件或目录。
GTK还提供了其他高级小部件,如`GtkStack`, GtkHeaderBar, GtkSearchBar, GtkPopover等,以及各种容器小部件(如`GtkBox`, GtkGrid, GtkEventBox等)组织其他小部件。此外,GTK的主题和CSS功能也允许自定义小部件样式。

二、使用GtkPaned的程序

以下是一个利用GTK+ 3和Python编写的简单示例程序,使用了`Gtk.Paned`作为布局容器。在这个例子中,我们将创建一个窗口,它包含一个水平分割面板,分割面板的左侧是一个文本输入框(`Gtk.TextView`),右侧是一个列表视图(`Gtk.TreeView`)。首先,按照上一个答案中提到的步骤,确保你的Windows环境中已经正确安装了Python、PyGObject和GTK+运行时环境。下面是示例程序的代码:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class PanedWindow(Gtk.Window):
    def __init__(self):
        super(PanedWindow, self).__init__(title='GtkPaned Example')
        self.set_default_size(450, 350)

        # 创建一个水平GtkPaned
        self.paned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
        self.add(self.paned)

        # 添加左侧的组件,一个文本输入框
        self.text_view = Gtk.TextView()
        self.scrolled_text = Gtk.ScrolledWindow()
        self.scrolled_text.set_policy(
            Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
        self.scrolled_text.add(self.text_view)
        self.paned.pack1(self.scrolled_text, resize=True, shrink=False)

        # 添加右侧的组件,一个列表视图
        self.store = Gtk.ListStore(str)
        self.tree_view = Gtk.TreeView(model=self.store)
        renderer = Gtk.CellRendererText()
        column = Gtk.TreeViewColumn('Items', renderer, text=0)
        self.tree_view.append_column(column)

        # 添加一些示例列表项
        for item in ['Item 1', 'Item 2', 'Item 3']:
            self.store.append([item])

        self.scrolled_tree = Gtk.ScrolledWindow()
        self.scrolled_tree.set_policy(
            Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
        self.scrolled_tree.add(self.tree_view)
        self.paned.pack2(self.scrolled_tree, resize=True, shrink=False)

    def run(self):
        self.connect('destroy', Gtk.main_quit)
        self.show_all()
        Gtk.main()

if __name__ == '__main__':
    win = PanedWindow()
    win.run()

在运行此代码后,应该会看到一个窗口,里面有一个分割面板,可以通过拖动面板中间的分隔栏来调整两侧区域的大小。左侧是一个可以输入文本的文本输入区域,右侧是一个展示简单列表项的列表视图。要执行上面的程序,将代码保存到一个文件中(例如`paned_example.py`),然后使用Python运行这个文件:

python paned_example.py

确保环境变量PATH包含了Python和GTK+的路径,以便程序能够找到必要的库文件。

三、包含GtkNotebook、GtkPaned、GtkMenu、GtkToolbar、GtkStatusbar和GtkDialog程序

以下是一个简单的Python程序,其中包含了GtkNotebook、GtkPaned、GtkMenu、GtkToolbar、GtkStatusbar和GtkDialog组件。这个程序创建了一个包含这些组件的基本窗口。
请按照前面提到的步骤确保安装了GTK+3和PyGObject,并在Windows机器上正确配置了环境。
程序代码如下:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyApplication(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="GTK Application with Many Widgets")
        self.set_default_size(600, 400)

        # 创建主布局
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.add(vbox)

        # 创建并填充菜单
        menu_bar = self.create_menu_bar()
        vbox.pack_start(menu_bar, expand=False, fill=False, padding=0)

        # 创建工具栏
        toolbar = self.create_toolbar()
        vbox.pack_start(toolbar, expand=False, fill=False, padding=0)

        # 创建带有GtkNotebook的GtkPaned
        paned = Gtk.Paned()
        vbox.pack_start(paned, expand=True, fill=True, padding=0)

        # 创建并填充状态栏
        statusbar = Gtk.Statusbar()
        vbox.pack_start(statusbar, expand=False, fill=False, padding=0)

        # 在paned组件中添加内容
        notebook = Gtk.Notebook()
        paned.add1(notebook)
        paned.add2(Gtk.Label("这里是右侧面板"))
        paned.show_all()

        # 添加两个tabs
        for i in range(1, 3):
            label = "Tab {}".format(i)
            notebook.append_page(Gtk.Label(label=label), Gtk.Label(label))

    def create_menu_bar(self):
        # 创建菜单栏
        menu_bar = Gtk.MenuBar()

        # 创建 "File" 菜单
        file_menu = Gtk.Menu()
        file_item = Gtk.MenuItem("File")
        file_item.set_submenu(file_menu)

        # 添加 "Open" 项,通过弹出对话框来响应
        open_item = Gtk.MenuItem("Open")
        open_item.connect("activate", self.on_open_activate)
        file_menu.append(open_item)

        # 添加 "Exit" 项
        exit_item = Gtk.MenuItem("Exit")
        exit_item.connect("activate", Gtk.main_quit)
        file_menu.append(exit_item)

        # 将 "File" 菜单添加到菜单栏
        menu_bar.append(file_item)

        return menu_bar

    def create_toolbar(self):
        toolbar = Gtk.Toolbar()
        open_btn = Gtk.ToolButton(Gtk.STOCK_OPEN)
        open_btn.connect("clicked", self.on_open_activate)
        toolbar.insert(open_btn, 0)
        exit_btn = Gtk.ToolButton(Gtk.STOCK_QUIT)
        exit_btn.connect("clicked", Gtk.main_quit)
        toolbar.insert(exit_btn, 1)
        return toolbar

    def on_open_activate(self, widget):
        dialog = Gtk.FileChooserDialog(
            title="Please choose a file",
            parent=self,
            action=Gtk.FileChooserAction.OPEN,
            buttons=(
                Gtk.STOCK_CANCEL,
                Gtk.ResponseType.CANCEL,
                Gtk.STOCK_OPEN,
                Gtk.ResponseType.OK,
            ),
        )
        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            print("Open clicked", "File selected: " + dialog.get_filename())
        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")
        dialog.destroy()


win = MyApplication()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

请确保在运行这段代码之前,已经安装了所有必要的依赖项。这个程序会创建一个具有菜单栏、工具栏、拖动条、多页签和状态栏的窗口。它也响应“Open”菜单项和工具栏按钮的点击,弹出一个文件选择对话框。程序中的`Gtk.main_quit`函数调用用于退出GTK主循环,关闭应用程序。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361767.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArrayList集合初始化长度是多少,初始化的时候分配内存空间吗

ArrayList一旦初始化,在内存中就会分配空间吗 是的,当ArrayList在Java中初始化时,即使它没有添加任何元素,也会立即分配内存空间。具体来说,对于默认构造函数创建的ArrayList(即不指定初始容量&#xff09…

idea/webstorm 创建Vue实例 Unresolved type Vue 处理方法

1.电脑本地安装node.js 官网下载 2. 其他: 未排除变量,前期试错(以下步骤配置了,但不确定对解决问题是否有帮助)

EasyExcel根据对应的实体类模板完成多个sheet的写入与读取

1.展示模板一的实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowH…

(已解决)Properties和Yaml格式互转

工具转换: 推荐转换工具或者下载idea插件yamls yml,properties互转工具:yaml和proper互转工具 插件转换: 下载yaml插件,对需要转换的文件右键选择转换

Redis常用数据类型--String

String 常用命令SETGETMGETMSETSETNXINCR/DECRINCRBY/DECRBYINCRBYFLOATAPPENDGETRANGESETRANGESTRLEN 内部编码典型应用场景 常用命令 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么。之 前关于此 k…

GIT基础命令使用

远程仓库的使用 HTTPS:零配置,但每次访问需要账号和密码 SSH:需要进行额外的配置配置成功后不需要重复输入账号密码 生成SSH Key ① 打开 Git Bash ②粘贴如下的命令,并将 your_emailexample.com 替换为注册Github账号时填写…

TSINGSEE青犀智能分析网关V4如何利用AI智能算法保障安全生产、监管,掀开安全管理新篇章

旭帆科技的智能分析网关V4内含近40种智能分析算法,包括人体、车辆、消防、环境卫生、异常检测等等,在消防安全、生产安全、行为检测等场景应用十分广泛。如常见的智慧工地、智慧校园、智慧景区、智慧城管等等,还支持抓拍、记录、告警、语音对…

Zookeeper分布式命名服务实战

目录 分布式命名服务 分布式API目录 分布式节点的命名 分布式的ID生成器 分布式的ID生成器方案: 基于Zookeeper实现分布式ID生成器 基于Zookeeper实现SnowFlakeID算法 分布式命名服务 命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用Z…

基于OpenCV的高压电力检测项目案例

一、项目背景与目标 随着高压电力设施的日益增多,传统的巡检方式已无法满足现代电力系统的需求。为此,我们决定利用计算机视觉技术,特别是OpenCV库,开发一个高压电力检测系统。目标是实现自动化、高精度的电力设备检测&#xff0c…

java之mybatis入门

大前题 正确创建好了springboot工程,极其依赖 配置数据库连接 application.yml spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/cangqiongusername: rootpassword: rootlombok Data 自动生成代码&#xff08…

JDBC 结构优化2

JDBC 结构优化2 文章目录 JDBC 结构优化2结构优化2 - ATM系统(存,取,转,查)1 Service2 事务3 ThreadLocal4 事务的封装 结构优化2 - ATM系统(存,取,转,查) 1 Service 什么是业务? 代表用户完成的一个业务功能,可以由一个或多个DAO的调用组成。软件所提供的一个功…

【spring】服务注册和发现是什么意思?Spring Cloud 如何实现?

🍎个人博客:个人主页 🏆个人专栏:Spring ⛳️ 功不唐捐,玉汝于成 目录 正文 我的其他博客 正文 当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署&#xff0c…

免费的ChatGPT网站(7个)

还在为找免费的chatGPT网站或者应用而烦恼吗?博主归纳总结了7个国内非常好用,而且免费的chatGPT网站,AI语言大模型,我们都来接触一下吧。 免费!免费!免费!...,建议收藏保存。 1&…

熟悉MATLAB 环境

一、问题描述 熟悉MATLAB 环境。 二、实验目的 了解Matlab 的主要功能,熟悉Matlab 命令窗口及文件管理,Matlab 帮助系统。掌握命令行的输入及编辑,用户目录及搜索路径的配置。了解Matlab 数据的特点,熟悉Matlab 变量的命名规则&a…

安卓网格布局GridLayout

<?xml version"1.0" encoding"utf-8"?> <GridLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:la…

故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

前端开发基于Qunee绘制网络拓扑图总结-02

1、渲染连线颜色 *关键函数一定要调用&#xff1a;graph.invalidate()* graph.forEach(function(element) {if (element instanceof Q.Edge) {let arr [#549BF1, #AA8A6E, #8F54F1,#5A70BC,#BCBF5C, #BC5A76, #67B4D4,#B4C9EF, #676AD4, #A86EAA,#5CBF7F, #EFB4B4];let inde…

TypeScript Array(九) 数组

1.TypeScript Array 数组 1.1. 描述 数组对象是使用单独的变量名来存储一系列的值。  &emsp比如&#xff0c;你现在有一组数据&#xff0c;存单独变量如下&#xff1a; var data1"Android"; var data2"Java"; var data3"Harmony";那如果有…

【unity小技巧】FPS简单的射击换挡瞄准动画控制

文章目录 射击动画控制换弹动画瞄准动画完结 射击动画控制 换弹动画 调用 瞄准动画 问题&#xff1a;瞄准时&#xff0c;但是动画会卡住&#xff0c;不会播放瞄准的待机动画 修改 调用 动画如果太快可以去修改播放速度 播放速度变慢了&#xff0c;可能导致切换待机动画也…

防火墙详解

一、基本定义 所谓“防火墙”是指一种将内部网和公众访问网&#xff08;如Internet&#xff09;分开的方法&#xff0c;它实际上是一种建立在现代通信网络技术和信息安全技术基础上的应用性安全技术&#xff0c;隔离技术。越来越多地应用于专用网络与公用网络的互联环境之中&a…