一、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主循环,关闭应用程序。