一、用python
在GTK中創(chuàng)建一個帶菜單的窗口,可以通過使用`Gtk.MenuBar`、`Gtk.Menu和
Gtk.MenuItem`組件來構(gòu)建菜單。以下是一個基本的例子,展示了如何使用Python的`PyGObject`庫創(chuàng)建一個簡單的帶菜單欄的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()
在這個例子中:
- 我們創(chuàng)建了一個窗口類`MenuExampleWindow`來包含菜單的邏輯。
- 使用`Gtk.MenuBar`, Gtk.Menu, 和 Gtk.MenuItem來創(chuàng)建菜單條和其子菜單項。
- 連接了"Quit"菜單項的"activate"信號到`Gtk.main_quit`函數(shù)以便退出程序。
要運行此代碼,保證已經(jīng)安裝了Python和PyGObject。在Linux系統(tǒng)上,通??梢允褂冒芾砥鱽戆惭bPyGObject。例如,在Ubuntu上,可以使用以下命令安裝:
sudo apt-get install python3-gi python3-gi-cairo gir1.2-gtk-3.0
在Windows上,可能需要使用MSYS2或其他方式來安裝GTK和PyGObject,具體的安裝步驟可能會比較復(fù)雜,需要下載GTK的編譯版本或使用適當?shù)陌芾砥鱽戆惭b。
GTK+原本是用C語言開發(fā)的,它是一套用于創(chuàng)建圖形用戶界面(Graphical User Interface, GUI)的多平臺工具集,最初由GIMP項目開發(fā),后來成為GNOME桌面環(huán)境的一部分。由于GTK+的可移植性和開放性,它已經(jīng)被綁定到許多其他編程語言中,包括Python、C++、Perl、Ruby等。
使用Python作為創(chuàng)建GTK+窗口的語言有幾個好處:
1. 簡潔性:Python語法簡單明了,使得創(chuàng)建GUI變得更加直觀和快速。
2. 開發(fā)效率:Python作為一種解釋性語言,允許快速迭代和調(diào)試,有利于提高開發(fā)效率。
3. 廣泛的應(yīng)用:因為Python的普及,很多開發(fā)者更傾向于使用Python來快速搭建原型和實現(xiàn)應(yīng)用程序。
4. 強大的社區(qū)支持:Python社區(qū)龐大,這意味著在開發(fā)過程中遇到問題時容易得到支持。
基于以上原因,許多開發(fā)者在開發(fā)GTK+應(yīng)用時選擇了Python。PyGObject是Python的一個庫,它為GTK+提供了Python綁定,使得Python開發(fā)者能夠使用純Python代碼創(chuàng)建和運行GTK+應(yīng)用程序。
但如果需要或偏好在C語言中使用GTK+,完全可以使用C語言來實現(xiàn)。以下是C語言的例子,展示如何創(chuàng)建帶有菜單的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語言版本的例子中,我們創(chuàng)建一個`GtkApplication`,然后在`activate`回調(diào)中構(gòu)建窗口和菜單。菜單項("Open"和"Quit")被添加到文件菜單中,"Quit"菜單項連接了一個`g_application_quit`信號,當該菜單項被激活時,應(yīng)用程序?qū)⑼顺觥?br> 選擇使用哪種語言創(chuàng)建GTK+程序取決于個人或項目需求,每種語言的綁定都提供了基本一致的GTK+功能。
示例2
#include <gtk/gtk.h>
// 事件處理函數(shù)
static void activate(GtkApplication *app, gpointer user_data) {
GtkWidget *window;
GtkWidget *menu_bar;
GtkWidget *menu_item;
GtkWidget *file_menu;
GtkWidget *file_menu_open;
// 創(chuàng)建窗口
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);
// 創(chuàng)建菜單欄
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);
// 創(chuàng)建'File'菜單的內(nèi)容
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);
// 創(chuàng)建盒子,將菜單欄放在上邊,其余部分放下邊
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;
// 創(chuàng)建GTK應(yīng)用
app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
// 運行應(yīng)用
status = g_application_run(G_APPLICATION(app), argc, argv);
// 退出應(yīng)用
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”子菜單項。請注意,示例代碼中的菜單并沒有綁定實際的功能。如果需要讓菜單項響應(yīng)動作,您需要實現(xiàn)相應(yīng)的回調(diào)函數(shù)并將其與菜單項的信號關(guān)聯(lián)起來。文章來源:http://www.zghlxwxcb.cn/news/detail-787481.html
三、相關(guān)鏈接:
https://blog.csdn.net/eidolon_foot/article/details/135330336?spm=1001.2014.3001.5502文章來源地址http://www.zghlxwxcb.cn/news/detail-787481.html
到了這里,關(guān)于【c/python】用GTK實現(xiàn)一個帶菜單的窗口的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!