多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# PyGTK 中的对话框 > 原文: [http://zetcode.com/gui/pygtk/dialogs/](http://zetcode.com/gui/pygtk/dialogs/) 在 PyGTK 编程教程的这一部分中,我们将介绍对话框。 对话框窗口或对话框是大多数现代 GUI 应用必不可少的部分。 对话被定义为两个或更多人之间的对话。 在计算机应用中,对话框是一个窗口,用于与应用“对话”。 反之亦然。 对话框用于输入数据,修改数据,更改应用设置等。对话框是用户与计算机程序之间进行通信的重要手段。 ## `MessageDialog` 消息对话框是方便的对话框,可向应用的用户提供消息。 该消息包含文本和图像数据。 `messages.py` ```py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows message # dialogs # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(250, 100) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("Message dialogs") table = gtk.Table(2, 2, True); info = gtk.Button("Information") warn = gtk.Button("Warning") ques = gtk.Button("Question") erro = gtk.Button("Error") info.connect("clicked", self.on_info) warn.connect("clicked", self.on_warn) ques.connect("clicked", self.on_ques) erro.connect("clicked", self.on_erro) table.attach(info, 0, 1, 0, 1) table.attach(warn, 1, 2, 0, 1) table.attach(ques, 0, 1, 1, 2) table.attach(erro, 1, 2, 1, 2) self.add(table) self.show_all() def on_info(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, "Download completed") md.run() md.destroy() def on_erro(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, "Error loading file") md.run() md.destroy() def on_ques(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_CLOSE, "Are you sure to quit?") md.run() md.destroy() def on_warn(self, widget): md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, "Unallowed operation") md.run() md.destroy() PyApp() gtk.main() ``` 在我们的示例中,我们将显示四种消息对话框。 信息,警告,问题和错误消息对话框。 ```py info = gtk.Button("Information") warn = gtk.Button("Warning") ques = gtk.Button("Question") erro = gtk.Button("Error") ``` 我们有四个按钮。 这些按钮中的每个按钮都会显示不同类型的消息对话框。 ```py md = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO, gtk.BUTTONS_CLOSE, "Download completed") md.run() md.destroy() ``` 如果单击信息按钮,将显示“信息”对话框。 `MESSAGE_INFO`指定对话框的类型。 `BUTTONS_CLOSE`指定要在对话框中显示的按钮。 最后一个参数是显示的消息。 该对话框使用`run()`方法显示。 程序员还必须调用`destroy()`或`hide()`方法。 ![Information message dialog](https://img.kancloud.cn/0b/57/0b57b208d8ef4ccc80d69f8a78421139_226x158.jpg) ![Warning message dialog](https://img.kancloud.cn/52/87/5287cc6bda2b8e553ee222b6658b02fd_222x158.jpg) ![Question message dialog](https://img.kancloud.cn/ef/8f/ef8ffb909aeca6598f8c227f80205105_225x158.jpg) ![Error message dialog](https://img.kancloud.cn/74/eb/74eb42cc7148a2ca7510b9722adf555b_195x158.jpg) ## `AboutDialog` `AboutDialog`显示有关应用的信息。 `AboutDialog`可以显示徽标,应用名称,版本,版权,网站或许可证信息。 也有可能对作者,文档撰写者,翻译者和艺术家予以赞扬。 `aboutdialog.py` ```py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example demonstrates the # AboutDialog dialog # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(300, 150) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("About battery") button = gtk.Button("About") button.set_size_request(80, 30) button.connect("clicked", self.on_clicked) fix = gtk.Fixed() fix.put(button, 20, 20) self.add(fix) self.show_all() def on_clicked(self, widget): about = gtk.AboutDialog() about.set_program_name("Battery") about.set_version("0.1") about.set_copyright("(c) Jan Bodnar") about.set_comments("Battery is a simple tool for battery checking") about.set_website("http://www.zetcode.com") about.set_logo(gtk.gdk.pixbuf_new_from_file("battery.png")) about.run() about.destroy() PyApp() gtk.main() ``` 该代码示例使用具有某些功能的`AboutDialog`。 ```py about = gtk.AboutDialog() ``` 我们创建一个`AboutDialog`。 ```py about = gtk.AboutDialog() about.set_program_name("Battery") about.set_version("0.1") about.set_copyright("(c) Jan Bodnar") ``` 我们指定名称,版本和版权。 ```py about.set_logo(gtk.gdk.pixbuf_new_from_file("battery.png")) ``` 此行创建徽标。 ![AboutDialog](https://img.kancloud.cn/d6/5c/d65cc7399eaae4e24f3e438e8b15358d_310x238.jpg) 图:`AboutDialog` ## `FontSelectionDialog` `FontSelectionDialog`是用于选择字体的对话框。 它通常用于进行一些文本编辑或格式化的应用中。 `fontdialog.py` ```py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example works with the # FontSelection dialog # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import pango class PyApp(gtk.Window): def __init__(self): gtk.Window.__init__(self) self.set_size_request(300, 150) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("Font Selection Dialog") self.label = gtk.Label("The only victory over love is flight.") button = gtk.Button("Select font") button.connect("clicked", self.on_clicked) fix = gtk.Fixed() fix.put(button, 100, 30) fix.put(self.label, 30, 90) self.add(fix) self.show_all() def on_clicked(self, widget): fdia = gtk.FontSelectionDialog("Select font name") response = fdia.run() if response == gtk.RESPONSE_OK: font_desc = pango.FontDescription(fdia.get_font_name()) if font_desc: self.label.modify_font(font_desc) fdia.destroy() PyApp() gtk.main() ``` 在代码示例中,我们有一个按钮和一个标签。 单击按钮显示`FontSelectionDialog`。 ```py fdia = gtk.FontSelectionDialog("Select font name") ``` 我们创建了`FontSelectionDialog.` ```py if response == gtk.RESPONSE_OK: font_desc = pango.FontDescription(fdia.get_font_name()) if font_desc: self.label.modify_font(font_desc) ``` 如果单击“确定”按钮,则标签小部件的字体将更改为我们在对话框中选择的字体。 ![FontSelectionDialog](https://img.kancloud.cn/f8/b6/f8b6a45fb73c0f82a1d973343d9c9ed1_460x369.jpg) 图:`FontSelectionDialog` ## `ColorSelectionDialog` `ColorSelectionDialog`是用于选择颜色的对话框。 `colordialog.py` ```py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example works with the # ColorSelection dialog # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(300, 150) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("Color Selection Dialog") self.label = gtk.Label("The only victory over love is flight.") button = gtk.Button("Select color") button.connect("clicked", self.on_clicked) fix = gtk.Fixed() fix.put(button, 100, 30) fix.put(self.label, 30, 90) self.add(fix) self.show_all() def on_clicked(self, widget): cdia = gtk.ColorSelectionDialog("Select color") response = cdia.run() if response == gtk.RESPONSE_OK: colorsel = cdia.colorsel color = colorsel.get_current_color() self.label.modify_fg(gtk.STATE_NORMAL, color) cdia.destroy() PyApp() gtk.main() ``` 该示例与上一个示例非常相似。 这次我们更改标签的颜色。 ```py cdia = gtk.ColorSelectionDialog("Select color") ``` 我们创建`ColorSelectionDialog`。 ```py if response == gtk.RESPONSE_OK: colorsel = cdia.colorsel color = colorsel.get_current_color() self.label.modify_fg(gtk.STATE_NORMAL, color) ``` 如果用户按下 OK,我们将获得颜色并修改标签的颜色。 ![ColorSelectionDialog](https://img.kancloud.cn/d4/1f/d41fd1b07ac5a391a6bafaa7322f5f95_539x314.jpg) 图:颜色 electionDialog 在 PyGTK 编程教程的这一部分中,我们使用了 PyGTK 内置对话框。