C++ 涓鐩存病鏈夊鏄庣櫧錛屽浜庝竴浜涢棶棰橈紝涓鐩翠篃娌℃湁瑙e喅銆? 浠婂ぉ灝濊瘯瑙e喅鐨勯棶棰橈紝鏉ユ簮浜庡井杞浣曟妸瀹冪殑搴撳疄鐜伴殣钘忚搗鏉ャ?/p>
涔嬪墠鐨勬兂娉曟槸錛屼笉綆″畾涔変綍縐嶇被鍜屾柟娉曪紝鎬誨簲璇ュ湪澶存枃浠朵腑鍑虹幇澹版槑錛? 浠庤岋紝涓浜沺rivate鐨勬柟娉曞拰鍙橀噺鎴戜滑涔熷簲璇ュ彲浠ユ帹鏂嚭鏉ャ? 浣嗘槸錛屼簨瀹炲茍涓嶆槸榪欐牱錛屽緢澶氭椂鍊欙紝鐪嬪埌鐨勫彧鏄痯ublic鐨勩?/p>
鑰屼粠鐞嗚涓婃潵璇達(dá)紝搴旇灝嗗疄鐜頒笌鎺ュ彛鍒嗙銆傚儚寰蔣鎻愪緵鐨勫ご鏂囦歡錛? 鐨勭‘宸茬粡瀹氫箟濂戒簡(jiǎn)鍥哄畾鐨勬帴鍙c傝岃繖鏍鳳紝瀹冧滑鍙渶瑕佸啀鎻愪緵綾誨簱錛? 鎴戜滑灝卞彲浠ョ敤浜?jiǎn)銆?/p>
棣栧厛錛屽畾涔変竴涓О涓?MyClass 鐨勭被錛屼負(fù)浜?jiǎn)鏂逛究锛屾垜鍒涘晦Z簡(jiǎn)涓涓洰褰曪紝 涓撻棬鐢ㄤ簬瀛樻斁緙栬瘧鎴戜滑鑷繁綾誨簱鐨勪唬鐮併?/p>
MyClass.h 鐨勪唬鐮侀潪甯哥畝鍗曪細(xì)
#ifndef MyClass_H #define MyClass_H class MyClass { public: void run(); }; #endif
榪欎釜涔嬪悗浼?xì)鏆撮湶缁欑敤鎴枫備絾鎴戜滑鍏堜笉榪涜瀹炵幇銆?/p>
涓嬮潰錛屽仛鐨勬槸鐪熸鐨勫伐浣滐紝鍗蟲垜浠笉闇瑕佺粰鐢ㄦ埛鐪嬬殑銆?/p>
瀹氫箟 PrivateMyClass.h 鍜?PrivateMyClass.cpp 銆?/p>
PrivateMyClass.h 鍐呭寰堢畝鍗曪細(xì)
#ifndef PrivateMyClass_H #define PrivateMyClass_H class PrivateMyClass { public: void canrun(); }; #endif
PrivateMyClass.cpp 涔熺畝鍗曪細(xì)
#include <iostream> #include "PrivateMyClass.h" void PrivateMyClass::canrun() { std::cout << "Begin Can RUN?" << std::endl; std::cout << "End Can RUN?" << std::endl; }
鐒跺悗錛屾垜浠湪 MyClass 鐨勫疄鐜頒腑錛岃皟鐢?PrivateMyClass 銆?/p>
MyClass.cpp 鍐呭錛?/p>
#include <iostream> #include "MyClass.h" #include "PrivateMyClass.h" void MyClass::run() { std::cout << "Begin RUN" << std::endl; PrivateMyClass pmc; pmc.canrun(); std::cout << "End RUN" << std::endl; }
鏈変簡(jiǎn)榪欎簺錛屽氨鍙互緙栬瘧鍑哄姩鎬佸簱浜?jiǎn)锛屽啓涓涓?Makefile 錛?/p>
lib:MyClass.o PrivateMyClass.o g++ -g -shared -o libresult.so MyClass.o PrivateMyClass.o MyClass.o:MyClass.cpp MyClass.h g++ -fPIC -Wall -g -c MyClass.cpp PrivateMyClass.o:PrivateMyClass.cpp PrivateMyClass.h g++ -fPIC -Wall -g -c PrivateMyClass.cpp
榪欐牱錛屾垜浠氨鍙妸 MyClass.h 鍜?libresult.so 緇欑敤鎴蜂簡(jiǎn)銆? 鎴戞斁鍒皃ublic鐨勭洰褰曚笅銆?/p>
涓轟簡(jiǎn)紜繚姝e父榪愯錛屽啓浠g爜嫻嬭瘯涓涓嬶細(xì)
#include "MyClass.h" int main() { MyClass mc; mc.run(); }
鐒跺悗鏄疢akefile錛?/p>
all:exe LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./result test1:exe LD_LIBRARY_PATH=../private/:$LD_LIBRARY_PATH ./result test2:exe LD_LIBRARY_PATH=../private-v2/:$LD_LIBRARY_PATH ./result exe:TestClass.o g++ -o result TestClass.o -L. -lresult TestClass.o:TestClass.cpp g++ -c TestClass.cpp
榪欎釜閲岄潰錛屽寘鍚簡(jiǎn)鍙﹀鐨勪竴涓祴璇曪細(xì)鍗沖簱鏇存柊鍚庯紝 鎴戞槸鍚﹀彲浠ヤ笉閲嶆柊緙栬瘧鐢ㄦ埛浠g爜銆?/p>
緇撹鏄紝鍙互涓嶇敤閲嶆柊緙栬瘧鐢ㄦ埛浠g爜銆?/p>
PyQt4 鏈変赴瀵岀殑緇勪歡銆備絾鏄笉鍙兘鎻愪緵鎵鏈夌殑緇勪歡銆侾yQt4 涓粎浠呮彁渚涙渶甯哥敤鐨勭粍浠訛紝鍍忔寜閽紝鏂囨湰妗嗭紝婊戝潡絳夈傚鏋滄垜浠渶瑕佺壒孌婄殑緇勪歡錛屾垜浠繀欏昏鑷繁鍒涘緩銆?/p>
鑷畾鍒剁粍浠跺彲浠ヤ嬌鐢ㄥ伐鍏峰寘鐢誨埗宸ュ叿鍒涘緩銆傛湁涓ょ鍙兘錛屼竴涓▼搴忓憳鍙互淇敼鎴栨彁鍗囦竴涓凡瀛樺湪鐨勫伐鍏鳳紝鎴栨槸浠庨浂寮濮嬪垱寤恒?/p>
榪欐槸涓涓粍浠訛紝鎴戜滑鍙互鍦?Nero錛孠3B 鎴栧叾瀹?CD/DVD 鍒誨綍杞歡銆?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we create a custom widget.
author: Jan Bodnar
website: zetcode.com
last edited: October 2011
"""
import sys
from PyQt4 import QtGui, QtCore
class Communicate(QtCore.QObject):
updateBW = QtCore.pyqtSignal(int)
class BurningWidget(QtGui.QWidget):
def __init__(self):
super(BurningWidget, self).__init__()
self.initUI()
def initUI(self):
self.setMinimumSize(1, 30)
self.value = 75
self.num = [75, 150, 225, 300, 375, 450, 525, 600, 675]
def setValue(self, value):
self.value = value
def paintEvent(self, e):
qp = QtGui.QPainter()
qp.begin(self)
self.drawWidget(qp)
qp.end()
def drawWidget(self, qp):
font = QtGui.QFont('Serif', 7, QtGui.QFont.Light)
qp.setFont(font)
size = self.size()
w = size.width()
h = size.height()
step = int(round(w / 10.0))
till = int(((w / 750.0) * self.value))
full = int(((w / 750.0) * 700))
if self.value >= 700:
qp.setPen(QtGui.QColor(255, 255, 255))
qp.setBrush(QtGui.QColor(255, 255, 184))
qp.drawRect(0, 0, full, h)
qp.setPen(QtGui.QColor(255, 175, 175))
qp.setBrush(QtGui.QColor(255, 175, 175))
qp.drawRect(full, 0, till-full, h)
else:
qp.setPen(QtGui.QColor(255, 255, 255))
qp.setBrush(QtGui.QColor(255, 255, 184))
qp.drawRect(0, 0, till, h)
pen = QtGui.QPen(QtGui.QColor(20, 20, 20), 1,
QtCore.Qt.SolidLine)
qp.setPen(pen)
qp.setBrush(QtCore.Qt.NoBrush)
qp.drawRect(0, 0, w-1, h-1)
j = 0
for i in range(step, 10*step, step):
qp.drawLine(i, 0, i, 5)
metrics = qp.fontMetrics()
fw = metrics.width(str(self.num[j]))
qp.drawText(i-fw/2, h/2, str(self.num[j]))
j = j + 1
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
sld = QtGui.QSlider(QtCore.Qt.Horizontal, self)
sld.setFocusPolicy(QtCore.Qt.NoFocus)
sld.setRange(1, 750)
sld.setValue(75)
sld.setGeometry(30, 40, 150, 30)
self.c = Communicate()
self.wid = BurningWidget()
self.c.updateBW[int].connect(self.wid.setValue)
sld.valueChanged[int].connect(self.changeValue)
hbox = QtGui.QHBoxLayout()
hbox.addWidget(self.wid)
vbox = QtGui.QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(300, 300, 390, 210)
self.setWindowTitle('Burning widget')
self.show()
def changeValue(self, value):
self.c.updateBW.emit(value)
self.wid.repaint()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
鍦ㄨ繖涓緥瀛愪腑錛屾垜浠湁涓涓?QtGui.QSlider 鍜屼竴涓嚜瀹氬埗緇勪歡銆傛粦鍧楁帶鍒朵簡(jiǎn)鑷畾鍒剁粍浠躲傝繖涓粍浠舵樉紺轟竴涓獟浠嬫葷殑瀹歸噺浠ュ強(qiáng)鍓╀綑鐨勫閲忋傝繖閲屾渶灝忕殑鍊兼槸 1錛屾渶澶ф槸 750 銆傚鏋滄垜浠埌杈?700 錛屾垜浠紑濮嬬敾綰㈣壊銆傝繖鏄敤浜庢寚紺鴻繃搴︾儳鍒躲?/p>
緇勪歡鏀懼湪紿楀彛鐨勫簳閮ㄣ傝繖閫氳繃涓涓?QtGui.QHBoxLayout 鍜?QtGui.QVBoxLayout 瀹炵幇銆?/p>
class BurningWidget(QtGui.QWidget):
def __init__(self):
super(BurningWidget, self).__init__()
榪欎釜緇勪歡鍩轟簬 QtGui.QWidget 緇勪歡銆?/p>
self.setMinimumSize(1, 30)
鎴戜滑鏇存敼浜?jiǎn)缁勪欢鏈灝忕殑澶у皬錛堥珮搴︼級(jí)銆傞粯璁ょ殑鍊兼槸涓鐐圭偣灝忋?/p>
font = QtGui.QFont('Serif', 7, QtGui.QFont.Light)
qp.setFont(font)
鎴戜滑鐢ㄥ皬浜庨粯璁ょ殑瀛椾綋銆傝繖閫傚悎浜庢垜浠殑闇瑕併?/p>
size = self.size()
w = size.width()
h = size.height()
step = int(round(w / 10.0))
till = int(((w / 750.0) * self.value))
full = int(((w / 750.0) * 700))
鎴戜滑鍔ㄦ佸湴緇樺埗緇勪歡銆傜獥鍙h秺澶э紝緇勪歡浼?xì)瓒婂ぇ銆傚弽涔嬩害鐒躲傝繖灝辨槸涓轟綍鎴戜滑瑕佽綆楃粍浠剁殑澶у皬銆傚弬鏁?till 鍐沖畾浜?jiǎn)瑕佺斦d灝戙傛鍊兼潵鑷簬婊戝潡緇勪歡銆傝繖鏄暣涓尯鍩熺殑閮ㄥ垎鍊箋傚弬鏁?full 鍐沖畾浜?jiǎn)浠涔堟椂鍊欏紑濮嬬粯鍒剁孩鑹查儴鍒嗐傛敞鎰忥紝姝ゅ浣跨敤浜?jiǎn)嬲Q鐐硅繍綆楋紝鏄負(fù)鏇撮珮鐨勭簿搴︺?/p>
鐪熸緇樺埗鏃跺寘鍚笁涓儴鍒嗐傛垜浠厛緇樺埗榛勮壊鎴栫孩鑹插拰榛勮壊鐨勭煩褰€傜劧鍚庣粯鍒跺瀭鐩寸殑綰匡紝涓昏鐢ㄤ簬鍒嗗壊緇勪歡銆傛渶鍚庢槸緇樺埗鏁板瓧錛岀敤浜庢寚紺哄獟浠嬬殑澶у皬銆?/p>
metrics = qp.fontMetrics()
fw = metrics.width(str(self.num[j]))
qp.drawText(i-fw/2, h/2, str(self.num[j]))
鎴戜滑浣跨敤瀛椾綋搴﹂噺鏉ョ粯鍒舵枃鏈傛垜浠繀欏昏鐭ラ亾鏂囨湰鐨勫搴︽潵灞呬腑緇樺埗銆?/p>
def changeValue(self, value):
self.c.updateBW.emit(value)
self.wid.repaint()
鎴戜滑縐誨姩婊戝潡鏃訛紝 changeValue() 鏂規(guī)硶灝辮璋冪敤浜?jiǎn)銆傚湪姝ゆ柟娉曞唴閮紝鎴戜滑鍙戦佷簡(jiǎn)鑷畾涔夌殑 updateBW 淇″彿錛屽茍涓斿甫浜?jiǎn)涓涓弬鏁般傝繖涓弬鏁版槸褰撳墠婊戝潡鐨勫箋傝繖涓肩敤浜庤綆楀湪 Burning 榪欎釜緇勪歡涓緇樺埗澶氬皯銆傝嚜瀹氫箟鐨勭粍浠剁劧鍚庤閲嶇粯銆?/p>
鏈儴鍒嗭紝鎴戜滑鍒涘緩浜?jiǎn)鑷忿q殑緇勪歡銆?/p>
鏈儴鍒嗭紝鎴戜滑灝嗚璁?drag 鍜?drop 鎿嶄綔銆?/p>
鍦ㄨ綆楁満涓殑鍥懼艦鐣岄潰涓紝 drag-and-drop 鏄緥濡傜偣鍑誨埌涓涓櫄鎷熷璞″茍鎶婂畠鎷栧埌鍙﹀鐨勪綅緗笂鐨勮涓恒備竴鑸潵璇達(dá)紝榪欏彲浠ョ敤浜庡緢澶氳涓猴紝鎴栧垱寤轟袱涓璞¢棿鐨勫叧鑱斻傦紙Wikipedia錛?/p>
drag 鍜?drop 鐨勫姛鑳芥槸 GUI 鏈鏈夌敤鐨勫姛鑳戒箣涓銆傚畠鍙互鏄敤鎴峰鐞嗗鏉傜殑宸ヤ綔銆?/p>
涓鑸潵璇達(dá)紝鎴戜滑鍙互 drag 鍜?drop 涓ょ涓滆タ錛屾暟鎹垨鍥懼艦瀵硅薄銆傚鏋滄垜浠惂涓騫呭浘鍍忎粠涓涓簲鐢ㄦ嫋鍒板彟涓涓簲鐢紝鎴戜滑澶勭悊鐨勬槸浜岃繘鍒舵暟鎹傚鏋滄垜浠湪 Firefox 涓嫋鍔ㄤ簡(jiǎn)涓涓爣絳撅紝鎴戜滑鎷栫殑鍒欐槸涓涓浘褰㈢粍浠躲?/p>
絎竴涓緥瀛愶紝鎴戜滑灝嗘湁涓涓?QtGui.QLineEdit 鍜?QtGui.QPushButton 銆傛垜浠皢浠庤緙栬緫鍖烘嫋鍔ㄦ枃鏈埌鎸夐挳涓娿?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
This is a simple drag and
drop example.
author: Jan Bodnar
website: zetcode.com
last edited: December 2010
"""
import sys
from PyQt4 import QtGui
class Button(QtGui.QPushButton):
def __init__(self, title, parent):
super(Button, self).__init__(title, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
def dropEvent(self, e):
self.setText(e.mimeData().text())
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
edit = QtGui.QLineEdit('', self)
edit.setDragEnabled(True)
edit.move(30, 65)
button = Button("Button", self)
button.move(190, 65)
self.setWindowTitle('Simple Drag & Drop')
self.setGeometry(300, 300, 300, 150)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
if __name__ == '__main__':
main()
綆鍗曠殑鎷栨嫿鎿嶄綔銆?/p>
class Button(QtGui.QPushButton):
def __init__(self, title, parent):
super(Button, self).__init__(title, parent)
涓轟簡(jiǎn)鍙互鎶婃枃瀛楁嫋鍒?QtGui.QPushButton 緇勪歡涓婏紝鎴戜滑蹇呴渶瑕侀噸鏂板疄鐜頒竴浜涙柟娉曘傛墍浠ユ垜浠垱寤轟簡(jiǎn)鎴戜滑鑷繁鐨勬寜閽被銆傚畠浠?QtGui.QPushButton 媧劇敓銆?/p>
self.setAcceptDrops(True)
鎴戜滑寮鍚厑璁告帴鍙楁嫋鍏ョ殑浜嬩歡銆?/p>
def dragEnterEvent(self, e):
if e.mimeDate().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
棣栧厛錛屾垜浠噸鏂板疄鐜頒簡(jiǎn) drageEnterEvent() 鏂規(guī)硶銆傛垜浠皢鎺ュ彈鐗瑰畾鐨勬暟鎹被鍨嬶紝姝ゅ鏄函鏂囨湰銆?/p>
def dropEvent(self, e):
self.setText(e.mimeDate().text())
閫氳繃閲嶆柊瀹炵幇 dropEvent() 鏂規(guī)硶錛屾垜浠畾涔変簡(jiǎn)鏀句笅鍚庡鐞嗙殑浜嬩歡銆傛垜浠湪榪欓噷鏄敼鍙樹簡(jiǎn)鎸夐挳涓殑鏄劇ず鏂囨湰銆?/p>
edit = QtGui.QLineEdit('', self)
edit.setDragEnabled(True)
QtGui.QLineEdit 緇勪歡鏈夊唴緗殑鎷栨嫿鎿嶄綔銆傛垜浠彧闇瑕佽皟鐢?setDragEnabled() 嬋媧誨畠?yōu)鍙互浜?jiǎn)銆?/p>
涓嬮潰鐨勪緥瀛愶紝鎴戜滑灝嗕粙緇嶅浣曟嫋鎷戒竴涓寜閽璞°?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this program, we can press
on a button with a left mouse
click or drag and drop the button
with the right mouse click.
author: Jan Bodnar
website: zetcode.com
last edited: December 2010
"""
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Button(QtGui.QPushButton):
def __init__(self, title, parent):
super(Button, self).__init__(title, parent)
def mouseMoveEvent(self, e):
if e.buttons() != QtCore.Qt.RightButton:
return
mimeData = QtCore.QMimeData()
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(e.pos() - self.rect().topLeft())
dropAction = drag.start(QtCore.Qt.MoveAction)
def mousePressEvent(self, e):
QtGui.QPushButton.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print 'press'
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.setAcceptDrops(True)
self.button = Button('Button', self)
self.button.move(100, 65)
self.setWindowTitle('Click or Move')
self.setGeometry(300, 300, 280, 150)
def dragEnterEvent(self, e):
e.accept()
def dropEvent(self, e):
position = e.pos()
self.button.move(position)
e.setDropAction(QtCore.Qt.MoveAction)
e.accept()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
if __name__ == '__main__':
main()
鍦ㄨ繖涓緥瀛愪腑錛屾垜浠湁涓涓?QtGui.QPushButton 鍦ㄧ獥鍙d笂銆傚鏋滄垜浠偣鍑?yán)L寜閽紝灝嗗湪鎺у埗鍙頒笂杈撳嚭 ‘press’ 銆傝屽鏋滃彸鍑?yán)L寜閽茍涓旂Щ鍔紝鎴戜滑灝卞彲浠ユ嫋鎷借繖涓寜閽粍浠躲?/p>
class Button(QtGui.QPushButton):
def __init__(self, title, parent):
super(Button, self).__init__(title, parent)
鎴戜滑鍒涘緩浜?jiǎn)涓涓淳鐢熻嚜 QtGui.QPushButton 鐨勬寜閽被銆傛垜浠繕閲嶆柊瀹炵幇浜?QtGui.QPushButton 涓殑涓や釜鏂規(guī)硶錛?mouseMoveEvent() 鍜?mousePressEvent() 銆傚叾涓紝 mouseMoveEvent() 鏂規(guī)硶鏄紑濮嬫嫋鎷藉鍙戠敓鐨勫湴鏂廣?/p>
if event.buttons() != QtCore.Qt.RightButton:
return
鎴戜滑鍐沖畾鍙敤榧犳爣鍙沖嚮榪涜鎷栨嫿銆傚乏鍑葷敤浜庣偣鍑?yán)L寜閽?/p>
mimeData = QtCore.QMimeData()
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(event.pos() - self.rect().topLeft())
鎴戜滑鍒涘緩浜?jiǎn)涓涓?QDrag 瀵硅薄銆?/p>
dropAction = drag.start(QtCore.Qt.MoveAction)
start() 鏂規(guī)硶寮濮嬫嫋鎷芥搷浣溿?/p>
def mousePressEvent(self, e):
QtGui.QPushButton.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print 'press'
濡傛灉鐐瑰嚮浜?jiǎn)榧犳爣宸﹂敭锛屾垜浠湪鎺у埗鍙颁笂鎵撳?‘press’ 銆傛敞鎰忥紝鎴戜滑榪樿皟鐢ㄤ簡(jiǎn)鐖剁被鐨?mousePressEvent() 鏂規(guī)硶銆傚惁鍒欙紝鎴戜滑灝嗕笉浼?xì)鐪嬪埌鎸夐挳琚寜涓嬨?/p>
position = e.pos()
self.button.move(position)
鍦?dropEvent() 鏂規(guī)硶涓紝瀹氫箟浜?jiǎn)褰撴垜浠潙旨榧犳爣鎸夐挳鍋滄鎷栨嫿鐨勮涓恒傛垜浠壘鍒伴紶鏍囧綋鍓嶇殑浣嶇疆錛屽茍鎶婃寜閽Щ鍒板悎閫傜殑浣嶇疆銆?/p>
e.setDropAction(QtCore.Qt.MoveAction)
e.accept()
鎴戜滑鎸囧畾浜?jiǎn)鎷栨嫿鐨劸c誨瀷銆傚湪姝ゅ鏄Щ鍔ㄧ殑琛屼負(fù)銆?/p>
鏈儴鍒嗘垜浠璁轟簡(jiǎn)鎷栨嫿銆?/p>
榪欓噷鎴戜滑灝嗙戶緇粙緇?PyQt4 緇勪歡銆傛垜浠皢娑夊強(qiáng) QtGui.QPixmap 錛?QtGui.QLineEdit 錛?QtGui.QSplitter 鍜?QtGui.QComboBox 銆?/p>
QtGui.QPixmap 鏄彲浠ュ鐞嗗浘鐗囩殑緇勪歡涔嬩竴銆傚畠瀵規(guī)樉紺哄浘鐗囪繘琛屼簡(jiǎn)浼樺寲銆傚湪鎴戜滑鐨勪緥瀛愪腑錛屾垜浠細(xì)鐢?QtGui.QPixmap 鏉ユ樉紺哄浘鐗囥?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we dispay an image
on the window.
author: Jan Bodnar
website: zetcode.com
last edited: September 2011
"""
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
hbox = QtGui.QHBoxLayout(self)
pixmap = QtGui.QPixmap("redrock.png")
lbl = QtGui.QLabel(self)
lbl.setPixmap(pixmap)
hbox.addWidget(lbl)
self.setLayout(hbox)
self.move(300, 200)
self.setWindowTitle('Red Rock')
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
鍦ㄨ繖涓緥瀛愰噷錛屾垜浠樉紺轟簡(jiǎn)涓騫呭浘鐗囥?/p>
pixmap = QtGui.QPixmap("redrock.png")
鎴戜滑鍒涘緩浜?jiǎn)涓涓?QtGui.QPixmap 瀵硅薄銆傚畠鎺ュ彈鏂囦歡鍚嶄綔涓哄弬鏁般?/p>
lbl = QtGui.QLabel(self)
lbl.setPixmap(pixmap)
鎴戜滑鎶?pixmap 鏀懼埌浜?QtGui.QLabel 涓?/p>
QtGui.QLineEdit 鏄竴涓厑璁歌緭鍏ュ拰緙栬緫涓琛岀函鏂囨湰銆傝繖涓粍浠朵腑鍙互鎾ら攢/鎭㈠錛屽壀鍒?綺樿創(chuàng)浠ュ強(qiáng)鎷栨媺銆?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
This example shows text which
is entered in a QtGui.QLineEdit
in a QtGui.QLabel widget.
author: Jan Bodnar
website: zetcode.com
last edited: August 2011
"""
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.lbl = QtGui.QLabel(self)
qle = QtGui.QLineEdit(self)
qle.move(60, 100)
self.lbl.move(60, 40)
qle.textChanged[str].connect(self.onChanged)
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('QtGui.QLineEdit')
self.show()
def onChanged(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
榪欎釜渚嬪瓙鏄劇ず涓涓緙栬緫鍖哄拰涓涓爣絳俱傛垜浠緭鍏ョ殑灝變細(xì)绔嬪嵆鍦ㄦ爣絳句腑鏄劇ず銆?/p>
qle = QtGui.QLineEdit(self)
鍒涘緩浜?QtGui.QLineEdit 緇勪歡銆?/p>
qle.textChanged[str].connect(self.onChanged)
濡傛灉鏂囨湰鍖虹殑鏂囨湰鏀瑰彉浜?jiǎn)锛屾垜浠瑸p皟鐢?onChanged() 鏂規(guī)硶銆?/p>
def onChanged(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
鍦?onChanged() 鏂規(guī)硶涓紝鎴戜滑鎶婅緭鍏ョ殑鏂囨湰鏀懼埌浜?jiǎn)鏍嚱{句腑銆傞氳繃璋冪敤 adjustSize() 鏂規(guī)硶錛屾垜浠妸鏍囩璁劇疆鍒版枃鏈殑闀垮害銆?/p>
QtGui.QSplitter 鍙互璁╃敤鎴鋒帶鍒跺瓙緇勪歡鐨勫ぇ灝忥紝閫氳繃鎷栧姩瀛愮粍浠剁殑澶у皬銆傚湪鎴戜滑鐨勪緥瀛愪腑錛屾垜浠殑涓変釜 QtGui.QFrame 灝嗙敱涓や釜 splitter 鍒嗗壊銆?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
This example shows
how to use QtGui.QSplitter widget.
author: Jan Bodnar
website: zetcode.com
last edited: September 2011
"""
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
hbox = QtGui.QHBoxLayout(self)
topleft = QtGui.QFrame(self)
topleft.setFrameShape(QtGui.QFrame.StyledPanel)
topright = QtGui.QFrame(self)
topright.setFrameShape(QtGui.QFrame.StyledPanel)
bottom = QtGui.QFrame(self)
bottom.setFrameShape(QtGui.QFrame.StyledPanel)
splitter1 = QtGui.QSplitter(QtCore.Qt.Horizontal)
splitter1.addWidget(topleft)
splitter1.addWidget(topright)
splitter2 = QtGui.QSplitter(QtCore.Qt.Vertical)
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)
hbox.addWidget(splitter2)
self.setLayout(hbox)
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QtGui.QSplitter')
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
鍦ㄨ繖涓緥瀛愪腑錛屾湁涓変釜妗嗘灦緇勪歡錛屼袱涓垎鍓叉潯銆?/p>
topleft = QtGui.QFrame(self)
topleft.setFrameShape(QtGui.QFrame.StyledPanel)
鎴戜滑浣跨敤浜?jiǎn)鏈夋牱寮忕殑妗嗘炗灱屼富瑕佺敤浜庣湅鍒拌疽?guī)銆?/p>
splitter1 = QtGui.QSplitter(QtCore.Qt.Horizontal)
splitter1.addWidget(topleft)
splitter1.addWidget(topright)
鎴戜滑鍒涘緩浜?jiǎn)涓涓?QtGui.QSplitter 緇勪歡錛屽茍娣誨姞鍒頒袱涓鏋躲?/p>
splitter2 = QtGui.QSplitter(QtCore.Qt.Vertical)
splitter2.addWidget(splitter1)
鎴戜滑涔熷彲浠ユ妸涓涓?splitter 娣誨姞鍒?splitter 涓?/p>
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
鎴戜滑浣跨敤涓涓畝媧佺殑鏍峰紡銆傚湪鏈変簺鏍峰紡涓紝妗嗘灦鏄笉鍙鐨勩?/p>
QtGui.QComboBox 鍏佽鐢ㄦ埛浠庝竴緇勯夐」涓夊彇涓涓?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
This example shows
how to use QtGui.QComboBox widget.
author: Jan Bodnar
website: zetcode.com
last edited: September 2011
"""
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.lbl = QtGui.QLabel("Ubuntu", self)
combo = QtGui.QComboBox(self)
combo.addItem("Ubuntu")
combo.addItem("Mandriva")
combo.addItem("Fedora")
combo.addItem("Red Hat")
combo.addItem("Gentoo")
combo.move(50, 50)
self.lbl.move(50, 150)
combo.activated[str].connect(self.onActivated)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QtGui.QComboBox')
self.show()
def onActivated(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
榪欎釜渚嬪瓙涓湁涓涓?QtGui.QComboBox 鍜?QtGui.QLable 銆傝繖閲屾湁浜斾釜閫夐」銆傚畠浠槸 Linux 鐨勫彂琛岀増銆傛爣絳句腑灝變細(xì)鏄劇ず閫変腑鐨勯」鐩?/p>
combo = QtGui.QComboBox(self)
combo.addItem("Ubuntu")
combo.addItem("Mandriva")
combo.addItem("Fedora")
combo.addItem("Red Hat")
combo.addItem("Gentoo")
鎴戜滑鍒涘緩涓涓?QtGui.QComboBox 緇勪歡騫跺鍔犱簡(jiǎn)浜斾釜閫夐」銆?/p>
combo.activated[str].connect(self.onActivated)
褰撻夋嫨涓涓夐」鍚庯紝鎴戜滑璋冪敤浜?onActivated() 鏂規(guī)硶銆?/p>
def onActivated(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
鍦ㄨ繖涓柟娉曚腑錛屾垜浠妸閫変腑鐨勯夐」鐨勬枃鏈斁鍒版爣絳句腑銆傛垜浠繕璋冩暣鏍囩鐨勫ぇ灝忋?/p>
鍦ㄦ湰閮ㄥ垎錛屾垜浠秹鍙?qiáng)浜?jiǎn)鍙﹀鍥涗釜 PyQt4 緇勪歡銆?/p>
Dialog 紿楀彛鎴?dialog 鏄幇浠?GUI 搴旂敤蹇呬笉鍙皯鐨勪竴閮ㄥ垎銆備竴涓?dialog 瀹氫箟涓轟袱浜烘垨鏇村浜洪棿鐨勪細(xì)璇濄傚湪璁$畻鏈哄簲鐢ㄤ腑錛宒ialog 灝辨槸涓涓拰搴旂敤璇磋瘽鐨勭獥鍙c俤ialog 鍙互鐢ㄤ簬杈撳叆鏁版嵁錛屼慨鏀規(guī)暟鎹紝鏇存敼搴旂敤鐨勮緗瓑絳夈傚璇濇鍦ㄧ敤鎴峰拰璁$畻鏈虹殑閫氫俊闂存槸閲嶈鐨勬墜孌點(diǎn)?/p>
QtGui.QInputDialog 鎻愪緵浜?jiǎn)涓涓畝鍗曟柟渚跨殑瀵硅瘽妗嗭紝鐢ㄤ簬鑾峰彇鐢ㄦ埛杈撳叆鐨勪竴涓箋傝緭鍏ュ煎彲浠ユ槸瀛楃涓詫紝鏁板瓧錛屾垨鑰呬竴涓垪琛ㄤ腑鐨勪竴欏廣?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we receive data from
a QtGui.QInputDialog dialog.
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.btn = QtGui.QPushButton('Dialog', self)
self.btn.move(20, 20)
self.btn.clicked.connect(self.showDialog)
self.le = QtGui.QLineEdit(self)
self.le.move(130, 22)
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Input dialog')
self.show()
def showDialog(self):
text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog',
'Enter your name:')
if ok:
self.le.setText(str(text))
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
榪欎釜渚嬪瓙涓敤鍒頒簡(jiǎn)涓涓寜閽拰涓涓緙栬緫緇勪歡銆傛寜閽細(xì)鏄劇ず涓涓緭鍏ュ璇濇鐢ㄤ簬寰楀埌鏂囨湰銆傝岃緭鍏ョ殑鏂囨湰灝嗗湪琛岀紪杈戠粍浠朵腑鏄劇ず銆?/p>
text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog',
'Enter your name:')
榪欎竴琛屾樉紺轟簡(jiǎn)杈撳叆瀵硅瘽妗嗐傜涓涓瓧絎︿覆鏄璇濇鐨勬爣棰橈紝絎簩涓瓧絎︿覆鍒欐槸瀵硅瘽妗嗕腑鐨勬秷鎭傚璇濇灝嗚繑鍥炶緭鍏ョ殑鏂囨湰鍜屼竴涓竷?yōu)當(dāng)鍊箋傚鏋滅偣鍑諱簡(jiǎn) ok 鎸夐挳錛屽垯甯冨皵鍊間負(fù) true 錛屽惁鍒欎負(fù) false 銆?/p>
if ok:
self.le.setText(str(text))
浠庡璇濇涓帴鏀跺埌鐨勬枃鏈氨琚緗埌琛岀紪杈戠粍浠朵腑銆?/p>
QtGui.QColorDialog 鐢ㄤ簬閫夊彇棰滆壊鍊箋?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we select a color value
from the QtGui.QColorDialog and change the background
color of a QtGui.QFrame widget.
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):
col = QtGui.QColor(0, 0, 0)
self.btn = QtGui.QPushButton('Dialog', self)
self.btn.move(20, 20)
self.btn.clicked.connect(self.showDialog)
self.frm = QtGui.QFrame(self)
self.frm.setStyleSheet("QWidget { background-color: %s }"
% col.name())
self.frm.setGeometry(130, 22, 100, 100)
self.setGeometry(300, 300, 250, 180)
self.setWindowTitle('Color dialog')
self.show()
def showDialog(self):
col = QtGui.QColorDialog.getColor()
if col.isValid():
self.frm.setStyleSheet("QWidget { background-color: %s }"
% col.name())
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
榪欎釜渚嬪瓙鏄劇ず涓涓寜閽拰涓涓?QtGui.QFrame 銆傝繖涓粍浠剁殑鑳屾櫙琚涓洪粦鑹層備嬌鐢?QtGui.QColorDialog 鍙互鏀瑰彉鍏惰儗鏅?/p>
col = QtGui.QColor(0, 0, 0)
榪欎釜鏄?QtGui.QFrame 鐨勫垵濮嬮鑹層?/p>
col = QtGui.QColorDialog.getColor()
榪欎竴琛屽皢寮瑰嚭 QtGui.QColorDialog 銆?/p>
if col.isValid():
self.frm.setStyleSheet("QWidget { background-color: %s }"
% col.name())
鎴戜滑媯(gè)鏌ラ鑹叉槸鍚﹀悎娉曘傚鏋滅偣鍑諱簡(jiǎn)鍙栨秷鎸夐挳錛岃繑鍥炵殑灝變笉鏄悎娉曞箋傚鏋滈鑹插悎娉曪紝鎴戜滑灝辯敤鏍峰紡琛ㄦ洿鏀硅儗鏅鑹層?/p>
QtGui.QFontDialog 鐢ㄤ簬閫夊彇瀛椾綋銆?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we select a font name
and change the font of a label.
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):
vbox = QtGui.QVBoxLayout()
btn = QtGui.QPushButton('Dialog', self)
btn.setSizePolicy(QtGui.QSizePolicy.Fixed,
QtGui.QSizePolicy.Fixed)
btn.move(20, 20)
vbox.addWidget(btn)
btn.clicked.connect(self.showDialog)
self.lbl = QtGui.QLabel('Knowledge only matters', self)
self.lbl.move(130, 20)
vbox.addWidget(self.lbl)
self.setLayout(vbox)
self.setGeometry(300, 300, 250, 180)
self.setWindowTitle('Font dialog')
self.show()
def showDialog(self):
font, ok = QtGui.QFontDialog.getFont()
if ok:
self.lbl.setFont(font)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
鍦ㄦ垜浠殑渚嬪瓙涓紝鎴戜滑鏈変竴涓寜閽拰涓涓爣絳俱傞氳繃 QtGui.QFontDialog 鎴戜滑鍙互鏀瑰彉鏍囩鐨勫瓧浣撱?/p>
font, ok = QtGui.QFontDialog.getFont()
鎴戜滑寮瑰嚭涓涓瓧浣撳璇濇銆?getFont() 鏂規(guī)硶灝嗚繑鍥炲瓧浣撶殑鍚嶇О鍜?ok 鍙傛暟銆傚鏋滅敤鎴風(fēng)偣鍑諱簡(jiǎn) OK 閭d箞灝辨槸 True 錛屽惁鍒欎負(fù) False 銆?/p>
if ok:
self.label.setFont(font)
濡傛灉鎴戜滑鐐瑰嚮浜?ok錛屾爣絳劇殑瀛椾綋灝卞彲鑳芥敼鍙樸?/p>
QtGui.QFileDialog 鏄厑璁哥敤鎴烽夋嫨鏂囦歡鎴栫洰褰曠殑瀵硅瘽妗嗐傛枃浠跺彲浠ョ敤浜庢墦寮鎴栦繚瀛樸?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we select a file with a
QtGui.QFileDialog and display its contents
in a QtGui.QTextEdit.
author: Jan Bodnar
website: zetcode.com
last edited: October 2011
"""
import sys
from PyQt4 import QtGui
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.textEdit = QtGui.QTextEdit()
self.setCentralWidget(self.textEdit)
self.statusBar()
openFile = QtGui.QAction(QtGui.QIcon('open.png'), 'Open', self)
openFile.setShortcut('Ctrl+O')
openFile.setStatusTip('Open new File')
openFile.triggered.connect(self.showDialog)
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(openFile)
self.setGeometry(300, 300, 350, 300)
self.setWindowTitle('File dialog')
self.show()
def showDialog(self):
fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file',
'/home')
f = open(fname, 'r')
with f:
data = f.read()
self.textEdit.setText(data)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
榪欎釜渚嬪瓙涓湁鑿滃崟鏍忥紝鏂囨湰緙栬緫鍖轟互鍙?qiáng)鐘舵佹爮銆傝彍鍗曚腑鐨勯夐」鏄劇ず QtGui.QFileDialog 鐢ㄤ簬閫夋嫨鏂囦歡銆傝屾枃浠剁殑鍐呭鍒欒澆鍏ュ埌鏂囨湰緙栬緫鍖恒?/p>
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
榪欎釜渚嬪瓙鏄熀浜?QtGui.QMainWindow 緇勪歡錛屽洜涓烘垜浠鍦ㄤ腑蹇?jī)璁揪|枃鏈紪杈戝尯銆?/p>
fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file',
'/home')
鎴戜滑寮瑰嚭 QtGui.QFileDialog 銆傚湪 getOpenFileName() 鏂規(guī)硶涓涓涓瓧絎︿覆鏄爣棰樸傜浜屼釜鍒欐槸鎸囧畾瀵硅瘽妗嗙殑宸ヤ綔鐩綍銆傞粯璁ゆ儏鍐典笅錛屾枃浠惰繃婊や負(fù)鎵鏈夋枃浠訛紙 * 錛夈?/p>
f = open(fname, 'r')
with f:
data = f.read()
self.textEdit.setText(data)
閫夋嫨鐨勬枃浠跺皢琚鍙栵紝騫朵笖鍏舵枃浠跺唴瀹硅緗埌鏂囨湰緙栬緫鍖恒?/p>
榪欎釜閮ㄥ垎錛屾垜浠璁轟簡(jiǎn)瀵硅瘽妗嗐?/p>
鍦ㄦ湰閮ㄥ垎錛屾垜浠皢浼?xì)鎺㈣浜嬩欢鍜屼俊鍙枫?/p>
鍦ㄤ換浣曠殑 GUI 紼嬪簭涓紝浜嬩歡鏄緢閲嶈鐨勯儴鍒嗐備簨浠舵槸鐢辯敤鎴鋒垨鎿嶄綔緋葷粺浜х敓鐨勩傚綋鎴戜滑璋冪敤搴旂敤鐨?exec_() 鏃訛紝搴旂敤灝辮繘鍏ヤ簡(jiǎn)涓誨驚鐜備富寰幆浼?xì)鎺ュ彈浜嬩欢迤堜笖鎶婂畠浠彂閫佺粰瀵硅薄銆俆rolltech 寮曞叆浜?jiǎn)涓涓嫭鐗圭殑淇″彿鍜屾Ы鏈哄埗銆?/p>
浜嬩歡鏄換浣?GUI 紼嬪簭涓緢閲嶈鐨勯儴鍒嗐傛墍鏈?GUI 搴旂敤閮芥槸浜嬩歡椹卞姩鐨勩備竴涓簲鐢ㄥ鍏剁敓鍛芥湡浜х敓鐨勪笉鍚岀殑浜嬩歡綾誨瀷鍋氬嚭鍙嶅簲銆備簨浠舵槸涓昏鐢卞簲鐢ㄧ殑鐢ㄦ埛浜х敓銆備絾鏄紝涔熷彲浠ラ氳繃鍏朵粬鏂規(guī)硶浜х敓錛屾瘮濡傦紝緗戠粶閫氫俊錛岀獥鍙g殑綆$悊鑰咃紝璁℃椂鍣ㄣ傚湪浜嬩歡妯″瀷涓紝鏈変笁涓弬涓庤咃細(xì)
event source 鏄偅浜涚姸鎬佹敼鍙樼殑瀵硅薄銆傚畠浜х敓浜嬩歡銆傝?event object 錛圗vent錛夊皝瑁呬簡(jiǎn)浜嬩歡婧愮殑鐘舵佹敼鍙樸傝?event target 鍒欐槸闇瑕佽閫氱煡鐨勩備簨浠舵簮鎶婂鐞嗕簨浠剁殑浠誨姟濮旀墭緇欎簡(jiǎn)浜嬩歡鐩爣銆?/p>
褰撴垜浠皟鐢ㄤ簡(jiǎn)搴旂敤鐨?exec_() 鏂規(guī)硶錛屽簲鐢ㄥ氨榪涘叆涓誨驚鐜簡(jiǎn)銆備富寰幆鎺ュ彈浜嬩歡鐒跺悗鎶婁粬浠彂閫佺粰瀵硅薄銆備俊鍙峰拰妲界敤浜庡璞¢棿鐨勯氫俊銆傚綋鐗瑰畾鐨勪簨浠跺彂鐢熸椂 淇″彿 灝辮鍙戦佷簡(jiǎn)銆傝?妲?/strong> 鍒欐槸浠諱綍 Python 涓彲璋冪敤鐨勩傚綋淇″彿鍙戦佺粰浜?jiǎn)杩欎釜妲藉Q屾Ы灝辮璋冪敤浜?jiǎn)銆?/p>
PyQt 4.5 寮曞叆浜?jiǎn)鏂扮?API 鐢ㄤ簬淇″彿鍜屾Ы銆?/p>
QtCore.QObject.connect(button, QtCore.SIGNAL('clicked()'), self.onClicked)
榪欐槸鏃у紡鐨?API 銆?/p>
button.clicked.connect(self.onClicked)
鏂板紡鐨勬洿鎺ヨ繎 Python 鐨勬爣鍑嗐?/p>
榪欐槸涓涓畝鍗曠殑渚嬪瓙錛屾弿榪?PyQt4 涓殑淇″彿鍜屾Ы銆?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we connect a signal
of a QtGui.QSlider to a slot
of a QtGui.QLCDNumber.
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):
lcd = QtGui.QLCDNumber(self)
sld = QtGui.QSlider(QtCore.Qt.Horizontal, self)
vbox = QtGui.QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)
self.setLayout(vbox)
sld.valueChanged.connect(lcd.display)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Signal & slot')
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
鍦ㄦ垜浠殑渚嬪瓙涓紝鎴戜滑鏄劇ず浜?QtGui.QLCDNumber 鍜?QtGui.QSlider 銆傞氳繃鎷栨嫿婊戝潡錛屾垜浠氨鍙互鏇存敼 lcd 鐨勬暟瀛椼?/p>
sld.valueChanged.connect(lcd.display)
姝ゅ錛屾垜浠妸 slider 鐨勪俊鍙?valueChanged 鍜?lcd 鐨勬Ы display 榪炴帴浜?jiǎn)钃v鏉ャ?/p>
sender 鏄彂閫佷俊鍙風(fēng)殑瀵硅薄銆?receiver 鏄帴鍙椾俊鍙風(fēng)殑瀵硅薄銆傝?slot 鏄洖棣堜俊鍙風(fēng)殑鏂規(guī)硶銆?/p>
鍦?PyQt4 涓簨浠剁殑澶勭悊涓鑸氳繃閲嶆柊瀹炵幇浜嬩歡鐨勫彞鏌勩?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we reimplement an
event handler.
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):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Event handler')
self.show()
def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_Escape:
self.close()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
鍦ㄦ垜浠殑渚嬪瓙涓紝鎴戜滑閲嶆柊瀹炵幇浜?keyPressEvent() 銆?/p>
def keyPressEvent(self, e):
if e.key() == QtCore.Qt.Key_Escape:
self.close()
濡傛灉鎴戜滑鎸?escape 閿紝閭d箞搴旂敤灝卞皢緇堟銆?/p>
鏈変簺鏃跺欙紝鐭ラ亾淇″彿鐨勫彂閫佽呮槸寰堟柟渚跨殑銆傚洜姝わ紝PyQt4 鏈変釜 sender() 鏂規(guī)硶銆?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we determine the event sender
object.
author: Jan Bodnar
website: zetcode.com
last edited: October 2011
"""
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
btn1 = QtGui.QPushButton("Button 1", self)
btn1.move(30, 50)
btn2 = QtGui.QPushButton("Button 2", self)
btn2.move(150, 50)
btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)
self.statusBar()
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Event sender')
self.show()
def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' was pressed')
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
榪欎釜渚嬪瓙涓湁涓や釜鎸夐挳銆傚湪 buttonClicked() 鏂規(guī)硶涓紝鎴戜滑閫氳繃璋冪敤 sender() 鏂規(guī)硶鐭ラ亾浜?jiǎn)鍝釜鎸夐挳琚偣鍑讳簡(jiǎn)銆?/p>
btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)
涓や釜鎸夐挳閮借繛鎺ュ埌鐩稿悓鐨勬Ы涓?/p>
def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessange(sender.text() + " was pressed")
鎴戜滑閫氳繃璋冪敤 sender() 鏂規(guī)硶鐭ラ亾浜?jiǎn)娑堟伅婧愩傚湪鐘舵佹爮涓紝鎴戜滑鏄劇ず浜?jiǎn)琚寜鐨勬寜閽殑鏍嚱{俱?/p>
鐢?QtCore.QObject 鍒涘緩鐨勫璞″彲浠ュ彂閫佷俊鍙楓傚鏋滄垜浠偣鍑?yán)L寜閽紝涓涓?clicked() 淇″彿灝辮鐢熸垚銆傚湪涓嬮潰鐨勪緥瀛愪腑鎴戜滑灝嗙湅鍒板浣曞彂閫佷俊鍙楓?/p>
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
In this example, we show how to emit a
custom signal.
author: Jan Bodnar
website: zetcode.com
last edited: October 2011
"""
import sys
from PyQt4 import QtGui, QtCore
class Communicate(QtCore.QObject):
closeApp = QtCore.pyqtSignal()
class Example(QtGui.QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.c = Communicate()
self.c.closeApp.connect(self.close)
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Emit signal')
self.show()
def mousePressEvent(self, event):
self.c.closeApp.emit()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
鎴戜滑鍒涘緩浜?jiǎn)涓涓柊鐨勪俊鍙風(fēng)О涓?closeApp 銆傝繖涓俊鍙峰湪榧犳爣鐐瑰嚮鏃跺皢琚彂閫併傝岃繖涓俊鍙峰張鍜?QtGui.QMainWindow 鐨?close() 妲界浉榪炴帴銆?/p>
class Communicate(QtCore.QObject):
closeApp = QtCore.pyqtSignal()
鎴戜滑鍒涘緩浜?jiǎn)鍩轰?QtCore.QObject 鐨勭被銆傚綋瀹冭瀹炰緥鍖栧悗灝卞垱寤轟簡(jiǎn)涓涓?closeApp 淇″彿銆?/p>
self.c = Communicate()
self.c.closeApp.connect(self.close)
綾?Communicate 鐨勫疄渚嬪氨琚垱寤轟簡(jiǎn)銆傛垜浠妸 QtGui.QMainWindow 鐨?close() 妲借繛鎺ュ埌淇″彿 closeApp 涓娿?/p>
def mousePressEvent(self, event):
self.c.closeApp.emit()
褰撻紶鏍囨寚閽堝湪紿楀彛涓偣鍑伙紝淇″彿 closeApp 灝辮鍙戦佷簡(jiǎn)銆?/p>
鍦ㄨ繖涓儴鍒嗭紝鎴戜滑娑夊強(qiáng)浜?jiǎn)淇″彿涓庢Ы銆?/p>