Home >> Python >> PyQt4 Second


■PyQt4でのイベント受け渡し(SignalとSlot)

☆合うウィジェット同士での受け渡し(PyQt4 Tutorialから)

	
	import sys
	from PyQt4.QtCore import *
	from PyQt4.QtGui import *

	# クラスの定義
	class LCDSample(QWidget):
	
		# オブジェクトが作られる時のコンストラクタの定義
		def __init__(self,parent=None):
			QWidget.__init__(self, parent)
	
			self.setWindowTitle( "LCD Sample")
			lcd = QLCDNumber(self)
			slider = QSlider(Qt.Horizontal,self)
	
			vbox = QVBoxLayout()
			vbox.addWidget(lcd)
			vbox.addWidget(slider)
	
			self.setLayout(vbox)
		# ここで結合しています
			self.connect( slider, SIGNAL("valueChanged(int)"), \
				lcd, SLOT("display(int)"))
			self.resize(250, 150)
	
	# アプリケーションの起動
	app = QApplication(sys.argv)
	ls = LCDSample()
	ls.show()
	sys.exit(app.exec_())
	

☆ウィジェットと自クラスのメソッド間での受け渡し

	
	# SIGNALにあわせて、自分のクラスのメソッドを呼び出す
	
	import sys
	from PyQt4.QtCore import *
	from PyQt4.QtGui import *
	
	class ActiveSample(QWidget):
		xxx = 0
		label = None
	
		def __init__(self,parent=None):
			QWidget.__init__(self, parent)
	
			self.setWindowTitle( "Active Sample")
	
			self.label = QLabel(str(self.xxx))
			slider = QSlider(Qt.Horizontal,self)
	
			vbox = QVBoxLayout()
			vbox.addWidget(self.label)
			vbox.addWidget(slider)
	
			self.setLayout(vbox)
			self.connect( slider, SIGNAL("valueChanged(int)"), self.changeXXX )
			self.resize(300, 200)
	
		def changeXXX(self,x):
			self.xxx = x
			self.label.setText(str(self.xxx))
			self.repaint()
			print(x)
	
		def paintEvent(self,event):
			paint = QPainter()
			paint.begin(self)
			paint.setPen(Qt.red)
			paint.drawEllipse(self.xxx, self.xxx,\
				 200-self.xxx*2, 200-self.xxx*2)
			paint.end()
	
	app = QApplication(sys.argv)
	sample = ActiveSample()
	sample.show()
	sys.exit(app.exec_())

	

PyQt4 First Python PyQt4 Third