青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 41, 文章 - 8, 評論 - 8, 引用 - 0
數據加載中……

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

第一個 PyQt4 的程序

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

簡單的例子

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

#!/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 應用必須創建一個 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 最先在內存中創建,然后顯示于屏幕上。

sys.exit(app.exec())

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

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__()

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

self.initUI()

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

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

這三個方法都是從類 QtGui.QWidget 中繼承下來的。 setGeometry() 做了兩件事情。首先是定位,然后是設置窗口大小。 前兩個參數是窗口的 x 和 y 。第三個參數是寬度,第四個是高度。事實上,它結合了 resize()move() 。最后一個方法設置了應用的圖標。為此,我們創建了 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))

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

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

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

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

我們創建了一個按鈕并為它設置了 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()

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

from PyQt4 import QtGui, QtCore

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

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

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

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

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

消息框

默認情況下,如果我們點擊了關閉按鈕, 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 閱讀(5755) 評論(4)  編輯 收藏 引用 所屬分類: Python

評論

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

初學Python,本文對我幫助不小,謝謝!好文要頂!
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
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99在线|亚洲一区二区| 国产精品亚洲аv天堂网| 欧美日韩喷水| 黄色欧美日韩| 午夜亚洲一区| 久久国产高清| 亚洲欧洲在线播放| 欧美国产欧美综合 | 国产亚洲成av人片在线观看桃 | 欧美午夜电影网| 亚洲精品一区二区三区av| 美女诱惑一区| 巨胸喷奶水www久久久免费动漫| 性色av一区二区三区红粉影视| 欧美jizzhd精品欧美巨大免费| 久久在线播放| 欧美电影在线观看| 亚洲毛片在线看| 亚洲一区二区三区三| 性欧美xxxx视频在线观看| 欧美一区二区三区久久精品茉莉花 | 一本大道久久a久久精二百| 99在线精品视频| 亚洲欧美国内爽妇网| 久久精品在这里| 欧美精品一区二区三区在线播放 | 亚洲中午字幕| 欧美视频日韩视频在线观看| 国产精品第2页| 伊人久久久大香线蕉综合直播| 亚洲国内欧美| 亚洲欧美成人一区二区在线电影 | 91久久精品一区二区别| 亚洲精品乱码久久久久久久久| 亚洲一二三级电影| 美女久久一区| 国产午夜精品美女毛片视频| 最新国产成人在线观看| 欧美在线三级| 亚洲精品久久在线| 性欧美大战久久久久久久免费观看| 美女视频黄a大片欧美| 国产精品美女久久福利网站| 狠狠做深爱婷婷久久综合一区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲欧美美女| 亚洲高清在线精品| 久久九九99视频| 日韩视频一区二区三区| 久久国产精品高清| 国产精品一区=区| 亚洲午夜电影网| 亚洲人屁股眼子交8| 久久久久久91香蕉国产| 国产精品私房写真福利视频| 亚洲精品乱码| 亚洲国产成人在线播放| 亚洲愉拍自拍另类高清精品| 欧美日本视频在线| 亚洲精品视频在线看| 久久视频在线免费观看| 午夜亚洲性色福利视频| 欧美日韩精品国产| 99视频在线精品国自产拍免费观看| 欧美在线观看一区二区三区| 亚洲精品一区二| 欧美高清视频免费观看| 亚洲成色777777在线观看影院| 午夜精品久久久久久久| 亚洲精品国产无天堂网2021| 牛牛影视久久网| 亚洲国产精品电影| 欧美黄免费看| 欧美日本韩国一区二区三区| 亚洲在线一区二区| 国产精品国产福利国产秒拍| 国产老肥熟一区二区三区| 亚洲综合国产精品| 亚洲欧美精品中文字幕在线| 国产麻豆综合| 亚洲成人在线视频网站| 欧美大胆成人| 9久re热视频在线精品| 99re热精品| 欧美理论片在线观看| 在线亚洲免费| 午夜一区在线| 亚洲精品美女91| 一本久久综合亚洲鲁鲁五月天| 欧美午夜精品理论片a级按摩| 午夜精品一区二区在线观看| 极品尤物一区二区三区| 亚洲黑丝在线| 欧美日韩精品一区二区| 欧美在线观看日本一区| 麻豆成人综合网| 亚洲一区二区成人在线观看| 午夜精品久久久久久久久久久 | 在线中文字幕一区| 国产精品毛片大码女人| 久久久午夜精品| 欧美高清视频一区| 香蕉久久一区二区不卡无毒影院| 久久久精品国产免大香伊| 亚洲国产一区二区视频| 这里只有精品丝袜| 在线观看成人小视频| 日韩视频在线观看国产| 亚洲毛片在线看| 午夜精品久久久久久久99樱桃| 在线精品国产欧美| 艳女tv在线观看国产一区| 国产美女高潮久久白浆| 欧美好骚综合网| 国产日韩欧美91| 亚洲欧洲日产国码二区| 国产亚洲一区二区三区在线播放| 欧美高清视频www夜色资源网| 国产精品理论片| 亚洲精品国精品久久99热一| 国产区精品视频| 一片黄亚洲嫩模| 亚洲另类在线一区| 久久精品国产99国产精品澳门| 亚洲色无码播放| 快she精品国产999| 久久久久综合网| 国产欧美欧洲在线观看| 亚洲四色影视在线观看| 中文欧美在线视频| 欧美理论片在线观看| 亚洲国产国产亚洲一二三| **网站欧美大片在线观看| 久久精品一本久久99精品| 久久精品国产一区二区三| 国产日韩成人精品| 欧美在线视频导航| 久久九九热re6这里有精品| 国产欧美69| 欧美在线免费播放| 久久久久国产精品午夜一区| 国产自产在线视频一区| 久久精品日韩一区二区三区| 久久久国产精品一区二区中文| 国内精品久久国产| 久久视频一区| 亚洲欧洲精品一区二区三区 | 亚洲国产精品久久久久婷婷老年| 欧美在线视频免费播放| 久久久五月婷婷| 亚洲大片一区二区三区| 午夜一区在线| 国产免费成人av| 欧美在线看片| 欧美黄色一区| 99精品国产高清一区二区| 欧美日韩国产精品一区| 99国产精品久久| 欧美在线播放一区| 极品少妇一区二区三区精品视频| 久久av一区二区| 免费毛片一区二区三区久久久| 国产欧美日韩一级| 夜夜爽www精品| 夜夜嗨av一区二区三区四季av| 亚洲毛片av在线| 亚洲国产精品一区二区久| 亚洲欧美在线免费观看| 国内精品久久久久久影视8| 亚洲毛片一区| 亚洲国产一区二区三区高清| 欧美怡红院视频| 一本色道**综合亚洲精品蜜桃冫 | 久久午夜色播影院免费高清| 欧美连裤袜在线视频| 久久综合网络一区二区| 国产精品区一区二区三区| 一区二区欧美激情| 国产日韩精品视频一区二区三区| 亚洲另类黄色| 亚洲精品免费网站| 久热这里只精品99re8久| 久久一区二区视频| 亚洲一区三区视频在线观看| 欧美理论在线| 99精品国产在热久久| 一本大道久久精品懂色aⅴ| 欧美大胆人体视频| 欧美中文在线观看国产| 欧美在线观看天堂一区二区三区 | 亚洲第一页中文字幕| 欧美图区在线视频| 99热在线精品观看| 欧美成人精品在线| 亚洲国内高清视频| 国产综合色一区二区三区| 蜜臀91精品一区二区三区| 一区二区三区 在线观看视| 亚洲国产高清一区二区三区| 亚洲天堂第二页|