pygtk消息提示對話框

轉自http://dawndiy.com/archives/378/

PyGObject 學習筆記(8)-消息對話框

寫在前面,先扯點無聊的。這幾天回家纔有時間用電腦,剛好昨天升級了一下 Ubuntu 12.10 。然後當然也要更新一下學習筆記,學習在於堅持嘛~ 可能發現標題不同了,不錯,我在前幾天談到我的學習心得和經歷讓我做出了選擇,一定要向前,用GTK 3 所以選擇PyGObject。可以看我寫的《PyGtk or PyGObject》,也扯了一些有的沒的。

好了,正題開始,今天在一點點的碼自己的項目的時候要用到一個很重要的東西,那就是“消息對話框”,即 Message Dialog 。這個是什麼了,如果你不知道那就快回火星吧!上圖!

對,就是上面這個圖,你見過吧。消息對話框在程序中隨處可見,他的作用就是提示或彈出一個信息讓用戶得知,所以消息對話框在交互方面和用戶體驗方面也是挺重要的。

在GTK 3中,構建消息對話框的類是MessageDialog。下面來看一下這個類:

class Gtk.MessageDialog(parent=None, flags=0, type=Gtk.MESSAGE_INFO, buttons=Gtk.BUTTONS_NONE, message_format=None)

parent :

父控件,一般是窗體

flags :

對話框標識,可以是 Gtk.DialogFlags.MODAL,Gtk.DIALOG_DESTROY_WITH_PARENT 或 0

type :

消息的類型,可以是 Gtk.MESSAGE_INFO, Gtk.MESSAGE_WARNING, Gtk.MESSAGE_QUESTIONGtk.MESSAGE_ERROR.

buttons :

可以使用預定義的按鈕: Gtk.BUTTONS_NONE, Gtk.BUTTONS_OK, Gtk.BUTTONS_CLOSE, Gtk.BUTTONS_CANCEL, Gtk.BUTTONS_YES_NO, Gtk.BUTTONS_OK_CANCEL 等

message_format :

消息的內容

Returns :

 G``tk.MessageDialog

上面就是構造消息對話框的 MessageDialog 類啦。

現在看一下我們最上面那個圖的代碼是怎麼樣的:

dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,Gtk.ButtonsType.OK, "這是一個信息消息對話框")
dialog.format_secondary_text("這裏是副文本用於說明信息。")
dialog.run()
dialog.destroy()

這是一個消息對話框的部分代碼。是不是很簡單,然而上面多了幾個函數下面解釋:

dialog.format_secondary_text("這裏是副文本用於說明信息。")

這個看圖也知道啊,就是現實在下面的副文本,可以用來顯示解釋性文字。

dialog.run()
dialog.destroy()

run執行後,對話框就會顯示了,這時候對話框不會馬上去執行後面的destroy來銷燬,而是等待我們的一個按鍵響應再來銷燬,所以這就是消息對話框有按鈕的原因了。

上面的例子我們沒有或得到按鍵響應,其實我們的按鍵響應就是由 dialog.run() 來返回的,所以中斷在它這裏嘛~那我們再看一個能獲取按鍵的例子,慣例,上圖先:

看吧,這樣的消息對話框就有兩個按鈕分別讓你選擇。看下局部代碼:

dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, "這是一個詢問消息對話框")
dialog.format_secondary_text("這裏是副文本用於說明信息。")
response = dialog.run()
if response == Gtk.ResponseType.YES:
    print("YES button is clicked")
elif response == Gtk.ResponseType.NO:
    print("NO button is clicked")
dialog.destroy()

看到代碼中我們定義了一個名爲 response 的變量來接受 dialog.run() 的返回,然後再做出判斷分別處理就OK啦。。。

好了,差不多就這些吧~大家可以試一試,我把寫好的一個完整的 Demo 貼出來:

#!/usr/bin/env python
# -*- coding: utf-8 -*
# MessageDialog
# PyGtk Study Notes By DawnDIY
# http://www.dawndiy.com 

from gi.repository import Gtk

class MessageDialogWindow(Gtk.Window):

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

        box = Gtk.Box(spacing=6)
        self.add(box)

        button1 = Gtk.Button("信息")
        button1.connect("clicked", self.on_info_clicked)
        box.add(button1)

        button2 = Gtk.Button("錯誤")
        button2.connect("clicked", self.on_error_clicked)
        box.add(button2)

        button3 = Gtk.Button("警告")
        button3.connect("clicked", self.on_warn_clicked)
        box.add(button3)

        button4 = Gtk.Button("詢問")
        button4.connect("clicked", self.on_question_clicked)
        box.add(button4)

    def on_info_clicked(self, widget):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,
        Gtk.ButtonsType.OK, "這是一個信息消息對話框")
        dialog.format_secondary_text(
        "這裏是副文本用於說明信息。")
        dialog.run()
        print "INFO dialog closed"

        dialog.destroy()

    def on_error_clicked(self, widget):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.ERROR,
        Gtk.ButtonsType.CANCEL, "這是一個錯誤消息對話框")
        dialog.format_secondary_text("這裏是副文本用於說明信息。")
        dialog.run()
        print "ERROR dialog closed"

        dialog.destroy()

    def on_warn_clicked(self, widget):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING,
        Gtk.ButtonsType.OK_CANCEL, "這是一個警告消息對話框")
        dialog.format_secondary_text(
        "這裏是副文本用於說明信息。")
        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            print "OK button is clicked"
        elif response == Gtk.ResponseType.CANCEL:
            print "CANCEL button is clicked"

        dialog.destroy()

    def on_question_clicked(self, widget):
        dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.QUESTION,
        Gtk.ButtonsType.YES_NO, "這是一個詢問消息對話框")
        dialog.format_secondary_text(
        "這裏是副文本用於說明信息。")
        response = dialog.run()
        if response == Gtk.ResponseType.YES:
            print "YES button is clicked"
        elif response == Gtk.ResponseType.NO:
            print "NO button is clicked"

        dialog.destroy()

win = MessageDialogWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章