• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 41, 文章 - 8, 評論 - 8, 引用 - 0
            數據加載中……

            [Python][PyQt4]第一個 PyQt4 的程序

            第一個 PyQt4 的程序

            本部分我們將學到一些基本的功能。

            簡單的例子

            這里的代碼非常簡單。它僅僅顯示一個小小的窗口。然后我們可以對這個窗口做很多事情。我們可以調正其大小,最大化,最小化。這個需要很多的代碼。但某些人已經編寫了這樣的功能。因為在很多應用中重復出現了這樣的代碼,沒有必要一再編寫這樣的代碼。所以,對于程序員這樣的代碼就被隱藏了。PyQt4 是一個高層的工具。如果以更底層的開發(fā),下面的例子可以要寫上很多行。

            #!/usr/bin/python
            # -*- coding: utf-8 -*-
            """
            ZetCode PyQt4 tutorial
            In this example, we create a simple
            window in PyQt4.
            author: Jan Bodnar
            website: zetcode.com
            last edited: October 2011
            """
            import sys
            from PyQt4 import QtGui
            def main():
                app = QtGui.QApplication(sys.argv)
                w = QtGui.QWidget()
                w.resize(250, 150)
                w.move(300, 300)
                w.setWindowTitle('Simple')
                w.show()
                sys.exit(app.exec_())
            if __name__ == '__main__':
                main()
            

            上面的代碼將會在屏幕上顯示一個小窗口。

            import sys
            from PyQt4 import QtGui
            

            這里我們提供一些必要的導入。最基本的 GUI widget 都在 QtGui 模塊中。

            app = QtGui.QApplication(sys.argv)
            

            每個 PyQt4 應用必須創(chuàng)建一個 application 對象。此 application 對象處于 QtGui 模塊中。參數 sys.argv 是從命令行獲取的參數列表。Python 腳本可以從 shell 中運行。這是一種控制啟動我們腳本的方式。

            w = QtGui.QWidget()
            

            在 PyQt4 中, QtGui.QWidget 是所有用戶接口對象的基類。我們提供了 QtGui.QWidget 的默認構造函數。默認的構造函數沒有父類。一個沒有父類的 widget 稱為一個窗口。

            w.resize(250, 150)
            

            resize() 方法調正了 widget 的大小。它寬 250px ,高 150px 。

            w.move(300, 300)
            

            move() 方法把 widget 移到屏幕坐標為 x = 300, y = 300 的地方。

            w.setWindowTitle('Simple')
            

            這里,我們設置了窗口的標題。標題在標題欄中顯示。

            w.show()
            

            show() 方法把這個 widget 顯示到屏幕上。一個 widget 最先在內存中創(chuàng)建,然后顯示于屏幕上。

            sys.exit(app.exec())

            最后,我們進入程序的主循環(huán)。事件的處理就從此時開始。主循環(huán)接受從窗口系統(tǒng)發(fā)送的事例,并把它們發(fā)給應用的 widget 。如果我們調用了 exit() 或者主窗口被銷毀,主循環(huán)就終止了。 sys.exit() 方法確保完全退出。整個環(huán)境將被通知應用如何終止。

            exec_() 方法有一個下劃線。這是由于 exec 是 Python 中的關鍵字。因此使用了 exec_()

            一個應用的圖標

            應用的圖標就是一塊小的圖像,顯示于標題欄的左上角。下面的例子講說明在 PyQt4 中是怎么做的。我們也會接受一些新的方法。

            #!/usr/bin/python
            # -*- coding: utf-8 -*-
            """
            ZetCode PyQt4 tutorial
            This example shows an icon
            in the titlebar of the window.
            author: Jan Bodnar
            website: zetcode.com
            last edited: October 2011
            """
            import sys
            from PyQt4 import QtGui
            class Example(QtGui.QWidget):
                def __init__(self):
                    super(Example, self).__init__()
                    self.initUI()
                def initUI(self):
                    self.setGeometry(300, 300, 250, 150)
                    self.setWindowTitle('Icon')
                    self.setWindowIcon(QtGui.QIcon('web.png'))
                    self.show()
            def main():
                app = QtGui.QApplication(sys.argv)
                ex = Example()
                sys.exit(app.exec_())
            if __name__ == '__main__':
                main()
            

            先前的例子是以過程式編寫的。Python 支持過程式和面向對象式的編程。在 PyQt4 中編程就意味著以 OOP 編程。

            class Example(QtGui.QWidget):
                def __init__(self):
                    super(Example, self).__init__()
            

            在面向對象編程中三個最重要的東西是類,數據及方法。這里,我們創(chuàng)建了一個新的類稱為 Example 。這個類從 QtGui.QWidget 派生。這就意味著我們必須調用兩個構造器。第一個是 Example 這個類,第二個是被繼承的類。 super() 方法就返回了 Example 的父對象,然后我們調用了其構造器。在 Python 中 __init__() 是構造器。

            self.initUI()
            

            GUI 的創(chuàng)建就委托給了 initUI() 這個方法。

            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('Icon')
            self.setWindowIcon(QtGui.QIcon('web.png'))
            

            這三個方法都是從類 QtGui.QWidget 中繼承下來的。 setGeometry() 做了兩件事情。首先是定位,然后是設置窗口大小。 前兩個參數是窗口的 x 和 y 。第三個參數是寬度,第四個是高度。事實上,它結合了 resize()move() 。最后一個方法設置了應用的圖標。為此,我們創(chuàng)建了 QtGui.QIcon 對象。 QtGui.QIcon 接受要顯示圖標的路徑。

            def main():
                app = QtGui.QApplication(sys.argv)
                ex = Example()
                sys.exit(app.exec_())
            if __name__ == '__main__':
                main()
            

            啟動代碼放在了 main() 方法中。這是 Python 的慣用方式。

            顯示提示

            我們可以給任何一個 widget 提供 balloon 式的提示。

            #!/usr/bin/python
            # -*- coding: utf-8 -*-
            """
            ZetCode PyQt4 tutorial
            This example shows a tooltip on
            a window and a button
            author: Jan Bodnar
            website: zetcode.com
            last edited: October 2011
            """
            import sys
            from PyQt4 import QtGui
            class Example(QtGui.QWidget):
                def __init__(self):
                    super(Example, self).__init__()
                    self.initUI()
                def initUI(self):
                    QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
                    self.setToolTip('This is a <b>QWidget</b> widget')
                    btn = QtGui.QPushButton('Button', self)
                    btn.setToolTip('This is a <b>QPushButton</b> widget')
                    btn.resize(btn.sizeHint())
                    btn.move(50, 50)
                    self.setGeometry(300, 300, 250, 150)
                    self.setWindowTitle('Tooltips')
                    self.show()
            def main():
                app = QtGui.QApplication(sys.argv)
                ex = Example()
                sys.exit(app.exec_())
            if __name__ == '__main__':
                main()
            

            在這個例子中,我們給 widget 都設置了 tooltip 。

            QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
            

            這個靜態(tài)方法設置了 tooltip 的字體。我們使用 10px 的 SansSerif 字體。

            self.setToolTip('This is a <b>QWidget</b> widget')
            

            為了創(chuàng)建 tooltip, 我們調用了 setTooltip() 方法。我們可以使用富文本格式(rich text formatting)。

            btn = QtGui.QPushButton('Button', self)
            btn.setToolTip('This is a <b>QPushButton</b> widget')
            

            我們創(chuàng)建了一個按鈕并為它設置了 tooltip 。

            btn.resize(btn.sizeHint())
            btn.move(50, 50)
            

            這個按鈕被重新設置大小并移到窗口相應的位置。 sizeHint() 方法給出一個推薦的大小。

            關閉窗口

            關閉窗口最直觀的方式就是點擊標題欄上的 x 。在后面的例子中,我們將會展示如何編程來關閉窗口。我們將會簡單的接觸信號(signal)和槽(slot)。

            下面是 QtGui.QPushButton 的構造器,我們將在例子中用到。

            QPushButton(string text, QWidget parent = None)

            參數中的 text 是將在按鈕中顯示的文字。而 parent 則是將要放置我們按鈕的 widget 。在我們這個情況下則是 QtGui.QWidget

            #!/usr/bin/python
            # -*- coding: utf-8 -*-
            """
            ZetCode PyQt4 tutorial
            This program creates a quit
            button. When we press the button,
            the application terminates.
            author: Jan Bodnar
            website: zetcode.com
            last edited: October 2011
            """
            import sys
            from PyQt4 import QtGui, QtCore
            class Example(QtGui.QWidget):
                def __init__(self):
                    super(Example, self).__init__()
                    self.initUI()
                def initUI(self):
                    qbtn = QtGui.QPushButton('Quit', self)
                    qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
                    qbtn.resize(qbtn.sizeHint())
                    qbtn.move(50, 50)
                    self.setGeometry(300, 300, 250, 150)
                    self.setWindowTitle('Quit button')
                    self.show()
            def main():
                app = QtGui.QApplication(sys.argv)
                ex = Example()
                sys.exit(app.exec_())
            if __name__ == '__main__':
                main()
            

            在這個例子中,我們創(chuàng)建了一個退出按鈕。按了這個后,應用就將結束。

            from PyQt4 import QtGui, QtCore
            

            在這個例子中,我們用到了 QtCore 模塊中的一個對象。

            qbtn = QtGui.QPushButton('Quit', self)
            

            我們創(chuàng)建了一個按鈕。這個按鈕是 QtGui.QPushButton 的實例。第一個參數是按鈕的標簽。第二個是父 widget 。此處的父 widget 是 Example 這個 widget。

            qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
            

            在 PyQt4 中,事件系統(tǒng)(event processing system)建立于信號和槽機制。如果我們點擊了一個按鈕,點擊的信號就被發(fā)送了。槽可以是 Qt 的槽或者任何 Python 可調用的。 QtCore.QCoreApplication 包含了事件的主循環(huán)。它處理所有的事件。 instance() 方法給我們它當前的實例。注意, QtCore.QCoreApplication 是和 QtGui.QApplication 一起創(chuàng)建的。點擊的信號則和終止應用的 quit() 方法連接了起來。通信是在兩個對象間完成。一個是發(fā)送者,也就是按鈕,另一個是接受者,就是應用對象。

            消息框

            默認情況下,如果我們點擊了關閉按鈕, QtGui.QWidget 就被關閉了。有些時候我們需要修改默認的行為。例如,如果在編輯器中我們對某文件進行了修改。那么我們退出時就要彈出消息框進行確認。

            #!/usr/bin/python
            # -*- coding: utf-8 -*-
            """
            ZetCode PyQt4 tutorial
            This program shows a confirmation
            message box when we click on the close
            button of the application window.
            author: Jan Bodnar
            website: zetcode.com
            last edited: October 2011
            """
            import sys
            from PyQt4 import QtGui
            class Example(QtGui.QWidget):
                def __init__(self):
                    super(Example, self).__init__()
                    self.initUI()
                def initUI(self):
                    self.setGeometry(300, 300, 250, 150)
                    self.setWindowTitle('Message box')
                    self.show()
                def closeEvent(self, event):
                    reply = QtGui.QMessageBox.question(self, 'Message',
                        "Are you sure to quit?", QtGui.QMessageBox.Yes |
                        QtGui.QMessageBox.No, QtGui.QMessageBox.No)
                    if reply == QtGui.QMessageBox.Yes:
                        event.accept()
                    else:
                        event.ignore()
            def main():
                app = QtGui.QApplication(sys.argv)
                ex = Example()
                sys.exit(app.exec_())
            if __name__ == '__main__':
                main()
            

            如果我們關閉 QtGui.QWidget ,就會產生 QtGui.QCloseEvent 。為了修改 widget 的行為,我們需要重新實現 closeEvent()

            reply = QtGui.QMessageBox.question(self, 'Message',
                "Are you sure to quit?", QtGui.QMessageBox.Yes |
                QtGui.QMessageBox.No, QtGui.QMessageBox.No)
            

            我們的消息框中有兩個按鈕, YesNo 。第一個字符串顯示在標題欄上。第二個則是對話框中的消息。第三個參數指定了要顯示的按鈕。最后的則是默認的按鈕。焦點是默認在這個按鈕上。返回值存在 reply 變量中。

            if reply == QtGui.QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
            

            這里,我們可以測試返回值。如果我們點擊了 Yes 按鈕,我們接受了關閉應用的事件。否則,忽略這個事件。

            居中窗口

            下面的腳本將會演示如何把窗口在屏幕中居中。

            #!/usr/bin/python
            # -*- coding: utf-8 -*-
            """
            ZetCode PyQt4 tutorial
            This program centers a window
            on the screen.
            author: Jan Bodnar
            website: zetcode.com
            last edited: October 2011
            """
            import sys
            from PyQt4 import QtGui
            class Example(QtGui.QWidget):
                def __init__(self):
                    super(Example, self).__init__()
                    self.initUI()
                def initUI(self):
                    self.resize(250, 150)
                    self.center()
                    self.setWindowTitle('Center')
                    self.show()
                def center(self):
                    qr = self.frameGeometry()
                    cp = QtGui.QDesktopWidget().availableGeometry().center()
                    qr.moveCenter(cp)
                    self.move(qr.topLeft())
            def main():
                app = QtGui.QApplication(sys.argv)
                ex = Example()
                sys.exit(app.exec_())
            if __name__ == '__main__':
                main()
            

            將會把窗口居中。

            self.center()
            

            把窗口居中的代碼放在了自定制的 center() 方法中。

            qr = self.frameGeometry()
            

            我們得到一個指定主窗口幾何的矩形。這個包含任何窗口框架。

            cp = QtGui.QDesktopWidget().availableGeometry().center()
            

            我們計算出顯示器的分辨率,并且從分辨率中得到了中間點。

            qr.moveCenter(cp)
            

            我們的矩形已經有其寬度和高度了。現在,我們把矩形的中心移到屏幕的中心。矩形的大小并未改變。

            self.move(qr.topLeft())
            

            我們應用窗口的左上角移到 qr 的左上角,這樣就完成了居中。


            在本部分,我們涉及一些基本的知識。

            posted on 2012-02-05 10:00 mirguest 閱讀(5721) 評論(4)  編輯 收藏 引用 所屬分類: Python

            評論

            # re: [Python][PyQt4]第一個 PyQt4 的程序  回復  更多評論   

            初學Python,本文對我?guī)椭恍。x謝!好文要頂!
            2012-02-11 15:35 | newer

            # re: [Python][PyQt4]第一個 PyQt4 的程序[未登錄]  回復  更多評論   

            不錯學習了 !
            2012-04-04 13:25 | zhang

            # re: [Python][PyQt4]第一個 PyQt4 的程序  回復  更多評論   

            謝謝博主,幫助非常大
            2013-01-24 19:14 | Laisky

            # re: [Python][PyQt4]第一個 PyQt4 的程序  回復  更多評論   

            非常感謝!!!樓主的分享~
            2015-03-25 14:57 | ywj
            丰满少妇人妻久久久久久4| 国产毛片欧美毛片久久久| 国产成人综合久久综合| 国产精品无码久久四虎| 久久综合给合综合久久| 亚洲精品无码久久久久| 国产精品九九久久免费视频| 亚洲v国产v天堂a无码久久| 久久久无码精品亚洲日韩蜜臀浪潮| 色狠狠久久AV五月综合| 久久996热精品xxxx| 麻豆AV一区二区三区久久| 国产香蕉97碰碰久久人人| 午夜欧美精品久久久久久久| 国内精品久久久久久久coent | 久久九色综合九色99伊人| 一本色道久久99一综合| 国产精品亚洲美女久久久| 色欲综合久久中文字幕网| 欧美激情精品久久久久久久九九九| 999久久久免费精品国产| 中文精品久久久久人妻不卡| 久久精品一区二区影院| 久久国产成人午夜aⅴ影院| 久久国产色AV免费看| 久久99久久99精品免视看动漫| 久久精品一区二区影院| 久久精品国产亚洲AV不卡| 久久久精品免费国产四虎| aaa级精品久久久国产片| 天堂久久天堂AV色综合| 日韩人妻无码一区二区三区久久 | 色婷婷噜噜久久国产精品12p| 青青草国产精品久久久久| 久久天天躁狠狠躁夜夜96流白浆 | 99久久婷婷国产一区二区| 久久国产精品99久久久久久老狼| 久久久久亚洲AV片无码下载蜜桃| 亚洲中文久久精品无码| 久久久久AV综合网成人| 国产精品99久久免费观看|