【c/python】用GTK实现一个带菜单的窗口

这篇具有很好参考价值的文章主要介绍了【c/python】用GTK实现一个带菜单的窗口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、用python

在GTK中创建一个带菜单的窗口,可以通过使用`Gtk.MenuBar`、`Gtk.MenuGtk.MenuItem`组件来构建菜单。以下是一个基本的例子,展示了如何使用Python的`PyGObject`库创建一个简单的带菜单栏的GTK窗口。

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

class MenuExampleWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Menu Example")

        self.set_default_size(200, 200)

        # Create a vertical box to pack widgets into
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(vbox)

        # Create a MenuBar and append items
        menubar = Gtk.MenuBar()
        filemenu = Gtk.Menu()
        file_item = Gtk.MenuItem("File")
        file_item.set_submenu(filemenu)
        
        # File menu items
        new_item = Gtk.MenuItem("New")
        filemenu.append(new_item)
        open_item = Gtk.MenuItem("Open")
        filemenu.append(open_item)
        quit_item = Gtk.MenuItem("Quit")
        quit_item.connect("activate", Gtk.main_quit)
        filemenu.append(quit_item)

        # Append the rest of the items to the menubar
        menubar.append(file_item)

        vbox.pack_start(menubar, False, False, 0)

        # Create a label to show the content area (for example purpose)
        self.label = Gtk.Label("Hello, this is the content area!")
        vbox.pack_start(self.label, True, True, 0)

# Initialize and run the application
win = MenuExampleWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

在这个例子中:
- 我们创建了一个窗口类`MenuExampleWindow`来包含菜单的逻辑。
- 使用`Gtk.MenuBar`, Gtk.Menu, 和 Gtk.MenuItem来创建菜单条和其子菜单项。
- 连接了"Quit"菜单项的"activate"信号到`Gtk.main_quit`函数以便退出程序。
要运行此代码,保证已经安装了Python和PyGObject。在Linux系统上,通常可以使用包管理器来安装PyGObject。例如,在Ubuntu上,可以使用以下命令安装:

sudo apt-get install python3-gi python3-gi-cairo gir1.2-gtk-3.0

在Windows上,可能需要使用MSYS2或其他方式来安装GTK和PyGObject,具体的安装步骤可能会比较复杂,需要下载GTK的编译版本或使用适当的包管理器来安装。

GTK+原本是用C语言开发的,它是一套用于创建图形用户界面(Graphical User Interface, GUI)【c/python】用GTK实现一个带菜单的窗口,编程,# C语言,# python,linux的多平台工具集,最初由GIMP项目开发,后来成为GNOME桌面环境的一部分。由于GTK+的可移植性和开放性,它已经被绑定到许多其他编程语言中,包括Python、C++、Perl、Ruby等。
使用Python作为创建GTK+窗口的语言有几个好处:
1. 简洁性:Python语法简单明了,使得创建GUI变得更加直观和快速。
2. 开发效率:Python作为一种解释性语言,允许快速迭代和调试,有利于提高开发效率。
3. 广泛的应用:因为Python的普及,很多开发者更倾向于使用Python来快速搭建原型和实现应用程序。
4. 强大的社区支持:Python社区庞大,这意味着在开发过程中遇到问题时容易得到支持。
基于以上原因,许多开发者在开发GTK+应用时选择了Python。PyGObject是Python的一个库,它为GTK+提供了Python绑定,使得Python开发者能够使用纯Python代码创建和运行GTK+应用程序。

但如果需要或偏好在C语言中使用GTK+,完全可以使用C语言来实现。以下是C语言的例子,展示如何创建带有菜单的GTK+窗口:

二、用C

示例1

#include <gtk/gtk.h>

static void activate(GtkApplication *app, gpointer user_data) {
    GtkWidget *window;
    GtkWidget *menubar;
    GtkWidget *file_menu;
    GtkWidget *file_menu_open;
    GtkWidget *file_menu_quit;
    GtkWidget *file_menu_item;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Menu Example");
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);

    // Create a MenuBar and a Menu
    menubar = gtk_menu_bar_new();
    file_menu = gtk_menu_new();

    // Create a file menu and add it to the menubar
    file_menu_item = gtk_menu_item_new_with_label("File");
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_menu_item), file_menu);
    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file_menu_item);

    // Add Open & Quit items to the file menu
    file_menu_open = gtk_menu_item_new_with_label("Open");
    gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_menu_open);

    file_menu_quit = gtk_menu_item_new_with_label("Quit");
    g_signal_connect_swapped(file_menu_quit, "activate", G_CALLBACK(g_application_quit), G_OBJECT(app));
    gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_menu_quit);

    // Assemble everything and show
    gtk_container_add(GTK_CONTAINER(window), menubar);
    gtk_widget_show_all(window);
}

int main(int argc, char **argv) {
    GtkApplication *app;
    int status;

    app = gtk_application_new("org.example.menubar", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);

    status = g_application_run(G_APPLICATION(app), argc, argv);
    g_object_unref(app);

    return status;
}

编译:

gcc `pkg-config --cflags gtk+-3.0` -o gtk_win gtk_win.c `pkg-config --libs gtk+-3.0`

在这个C语言版本的例子中,我们创建一个`GtkApplication`,然后在`activate`回调中构建窗口和菜单。菜单项("Open"和"Quit")被添加到文件菜单中,"Quit"菜单项连接了一个`g_application_quit`信号,当该菜单项被激活时,应用程序将退出。
选择使用哪种语言创建GTK+程序取决于个人或项目需求,每种语言的绑定都提供了基本一致的GTK+功能。

示例2

#include <gtk/gtk.h>

// 事件处理函数
static void activate(GtkApplication *app, gpointer user_data) {
    GtkWidget *window;
    GtkWidget *menu_bar;
    GtkWidget *menu_item;
    GtkWidget *file_menu;
    GtkWidget *file_menu_open;

    // 创建窗口
    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Window with Menu");
    gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

    // 创建菜单栏
    menu_bar = gtk_menu_bar_new();
    menu_item = gtk_menu_item_new_with_label("File");
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_item);
    
    // 创建'File'菜单的内容
    file_menu = gtk_menu_new();
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), file_menu);

    // 添加'Open'菜单项
    file_menu_open = gtk_menu_item_new_with_label("Open");
    gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_menu_open);

    // 创建盒子,将菜单栏放在上边,其余部分放下边
    GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
    gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 0);

    // 添加盒子到窗口
    gtk_container_add(GTK_CONTAINER(window), vbox);

    // 显示所有窗口组件
    gtk_widget_show_all(window);
}

int main(int argc, char **argv) {
    GtkApplication *app;
    int status;

    // 创建GTK应用
    app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    
    // 运行应用
    status = g_application_run(G_APPLICATION(app), argc, argv);
    
    // 退出应用
    g_object_unref(app);

    return status;
}

编译:

gcc `pkg-config --cflags gtk+-3.0` -o gtk_menu_app gtk_menu_app.c `pkg-config --libs gtk+-3.0`

pkg-config 工具用于获取GTK+ 3库的C标志和链接标志。

这将启动GTK窗体程序,显示一个菜单栏位于窗口上方的窗口。其中“File”菜单包含一个“Open”子菜单项。请注意,示例代码中的菜单并没有绑定实际的功能。如果需要让菜单项响应动作,您需要实现相应的回调函数并将其与菜单项的信号关联起来。

三、相关链接:

https://blog.csdn.net/eidolon_foot/article/details/135330336?spm=1001.2014.3001.5502文章来源地址https://www.toymoban.com/news/detail-787481.html

到了这里,关于【c/python】用GTK实现一个带菜单的窗口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows编程(1)-第一个窗口程序

    文章首发于:My Blog 欢迎大佬们前来逛逛 win32的main函数入口点为 WinMain 或者 wWinMain ,他们包含四个参数: 其中: hInstance:应用程序当前窗口的实例句柄 hPrevInstance:应用程序上一个窗口的实例句柄 lpCmdLine:应用程序的命令行 nShowcmd:控制窗口的显示方式 其中wWinMain与WinMai

    2023年04月10日
    浏览(38)
  • 【Python】实现一个类似于Glass2k的Windows窗口透明化软件

            网上看到一款Windows下的窗口透明化工具Glass2k(Glass2k官网),可以简单地通过快捷键实现任意窗口的透明化,还挺方便的,想用Python自己实现一下类似的功能。          软件已经开源到 :窗口透明化小工具开源地址         效果图如下:         工具包含以

    2024年02月22日
    浏览(34)
  • Qt界面编程(四)—— QMainWindow(一个菜单栏、多个工具栏、多个停靠部件、一个状态栏、一个中心部件)、资源文件

    目录 1. 菜单栏 2. 工具栏 3. 状态栏 4. 停靠部件(也称为铆接部件、浮动窗口) 5. 核心部件(中心部件) 6. 使用UI文件创建窗口 6.1 UI设计窗口介绍 6.2 菜单栏 6.2.1 添加/删除菜单栏 6.2.2 添加菜单 6.2.3 添加菜单项 6.2.4 添加多级菜单 6.3 工具栏 6.3.1 添加/删除工具栏 6.3.

    2024年01月22日
    浏览(51)
  • linux环境编程(1): 实现一个单元测试框架-2

    在之前的文章中, 介绍了如何实现一个类似gtest的单元测试框架, 完整的项目代码可以参考这里: https://github.com/kfggww/cutest . 近期对cutest的实现做了一些修改, 包括: Test Suite的声明宏, 修改为TEST_SUITE 增加Test Suite的声明宏TEST_SUITE_WITH. 可传递Suite的init和cleanup函数, 在Suite中每个Cas

    2024年02月12日
    浏览(33)
  • Linux网络编程二(TCP三次握手、四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

    TCP三次握手 TCP 三次握手 (TCP three-way handshake)是TCP协议建立可靠连接的过程,确保客户端和服务器之间可以进行可靠的通信。下面是TCP三次握手的详细过程: 假设客户端为A,服务器为B 1 、第一次握手(SYN=1,seq=500) A向B发送一个带有SYN标志位的数据包,表示A请求建立连接。

    2024年02月06日
    浏览(58)
  • Erocool是一个编程项目 - 实现一个基于Python的简单游戏

    在这篇文章中,我们将探讨一个名为Erocool的编程项目,它是一个基于Python的简单游戏。我们将详细介绍这个项目的目标、功能和实现细节,并提供相应的源代码。 Erocool项目的目标是创建一个有趣的游戏,其中玩家需要通过键盘输入正确的答案来解决问题。这个游戏的主题是

    2024年01月23日
    浏览(49)
  • python机器人编程——用python实现一个写字机器人

    本篇我们构建一个可以跟人一样写字的机器人python软件。实现如下功能:打开一个写字板,人类在屏幕上写或画出任意形状,机器人同步在纸面上画出和人类一样的形状,就好像人类在远程操控机械臂,又或是机械臂是人的另一只手。这个软件是可以扩展的,如果连上互联网

    2024年02月05日
    浏览(44)
  • Linux网络编程二(TCP图解三次握手及四次挥手、TCP滑动窗口、MSS、TCP状态转换、多进程/多线程服务器实现)

    1、TCP三次握手 TCP 三次握手 (TCP three-way handshake)是 TCP协议建立可靠连接 的过程,确保客户端和服务器之间可以进行可靠的通信。下面是TCP三次握手的 详细过程 : 假设客户端为A,服务器为B。 (1) 第一次握手 第一次握手(SYN=1,seq=500) A向B发送一个带有 SYN 标志位的数据包,

    2024年04月22日
    浏览(49)
  • Ubuntu20.4 Mono C# gtk 编程习练笔记(二)

    界面设计习练后,下面写一些程序设计心得。 先看一下程序总体结构,先在program.cs中找到main入口,在命名空间下是MainClass类,Main函数进入后首先建立应用程序环境 Application.Init,然后对MainWindow进行实例化,显示窗体并运行程序 Application.Run()。 main - application init - mainwindow{

    2024年01月21日
    浏览(41)
  • Ubuntu20.4 Mono C# gtk 编程习练笔记(三)

    Mono对gtk做了很努力的封装,即便如此仍然与System.Windows.Form中的控件操作方法有许多差异,这是gtk本身特性或称为特色决定的。下面是gtk常用控件在Mono C#中的一些用法。 在工具箱中该控件的clicked信号双击后自动生成回调函数prototype,下面的函数当Button12点击后其标签名变为

    2024年01月18日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包