ตัว_widget.สัญญาณ.connect(ฟังก์ชันที่จะให้ทำ)
import sys
from PyQt5.QtWidgets import QApplication,QPushButton
qAp = QApplication(sys.argv)
pumkot = QPushButton()
print(pumkot.clicked.__class__) # <class 'PyQt5.QtCore.pyqtBoundSignal'>
print(pumkot.clicked.connect) # <built-in method connect of PyQt5.QtCore.pyqtBoundSignal object at 0x7fa26c5824b0>
import sys
from PyQt5.QtWidgets import QApplication,QPushButton
qAp = QApplication(sys.argv)
pumkot = QPushButton()
pumkot.clicked.connect(lambda: print('ปุ่มถูกกด'))
pumkot.clicked.emit() # ทำงานเหมือนเวลาถูกคลิก
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QCheckBox,QHBoxLayout
class Natang(QWidget):
def __init__(self):
super().__init__()
self.setStyleSheet('font-family: Tahoma; font-size: 19px;')
hbl = QHBoxLayout()
self.setLayout(hbl)
self.pumkot = QPushButton('ปุ่มกด')
hbl.addWidget(self.pumkot)
self.pumkot.clicked.connect(self.pumthukkot)
self.chongtick = QCheckBox('ช่องติ๊ก')
hbl.addWidget(self.chongtick)
self.chongtick.toggled.connect(self.chongthuktick)
self.show()
def pumthukkot(self): # เมื่อปุ่มถูกกด
print('ปุ่มถูกกด')
def chongthuktick(self): # เมื่อช่องถูกติ๊ก
print('ช่องถูกติ๊ก')
self.pumkot.clicked.emit() # ให้ปล่อยสัญญาณเหมือนตอนปุ่มถูกกดไปด้วย
qAp = QApplication(sys.argv)
natang = Natang()
qAp.exec_()
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QCheckBox,QVBoxLayout
from PyQt5.QtCore import pyqtSignal
class Natang(QWidget):
sanyan = pyqtSignal() # สร้างสัญญาณชื่อ sanyan ขึ้นมา
def __init__(self):
super().__init__()
self.setStyleSheet('font-family: Tahoma; font-size: 19px;')
vbl = QVBoxLayout()
self.setLayout(vbl)
self.pumkot = QPushButton('ปุ่มกด')
vbl.addWidget(self.pumkot)
self.pumkot.clicked.connect(self.pumthukkot)
self.chongtick = QCheckBox('ช่องติ๊ก')
vbl.addWidget(self.chongtick)
self.chongtick.toggled.connect(self.chongthuktick)
self.sanyan.connect(self.dairapsanyan) # สิ่งที่จะให้ทำเมื่อมีการปล่อยสัญญาณ
self.show()
def pumthukkot(self):
print('ปุ่มถูกกด')
self.sanyan.emit() # เรียกใช้สัญญาณ
def chongthuktick(self):
print('ช่องถูกติ๊ก')
self.sanyan.emit()
def dairapsanyan(self):
print('ปล่อยสัญญาณ') # เรียกใช้สัญญาณ
qAp = QApplication(sys.argv)
natang = Natang()
qAp.exec_()
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QSlider,QHBoxLayout
from PyQt5.QtCore import pyqtSignal,Qt
class Natang(QWidget):
thiap = pyqtSignal() # สร้างสัญญาณชื่อ thiap
def __init__(self):
super().__init__()
self.setStyleSheet('font-family: Tahoma; font-size: 17px;')
hbl = QHBoxLayout()
self.setLayout(hbl)
self.tualuean1 = QSlider() # แถบเลื่อนซ้าย
hbl.addWidget(self.tualuean1)
self.tualuean1.valueChanged.connect(self.thiap.emit) # ปล่อยสัญญาณเมื่อเปลี่ยนค่าในตัวเลื่อนขวา
self.khatang = QLabel('') # ข้อความตรงกลาง แสดงค่าต่าง
hbl.addWidget(self.khatang)
self.khatang.setFixedSize(180,50)
self.khatang.setAlignment(Qt.AlignCenter)
self.thiap.connect(self.muealuean)
self.tualuean2 = QSlider() # แถบเลื่อนขวา
hbl.addWidget(self.tualuean2)
self.tualuean2.valueChanged.connect(self.thiap.emit) # ปล่อยสัญญาณเมื่อเปลี่ยนค่าในตัวเลื่อนขวา
self.show()
def muealuean(self):
tangkan = self.tualuean1.value()-self.tualuean2.value() # ค่าต่าง
if(tangkan>0):
self.khatang.setText('ซ้ายมากกว่าขวา %d'%tangkan)
elif(tangkan<0):
self.khatang.setText('ขวามากกว่าซ้าย %d'%(abs(tangkan)))
else:
self.khatang.setText('เท่ากัน')
qAp = QApplication(sys.argv)
natang = Natang()
qAp.exec_()
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QCheckBox,QVBoxLayout
from PyQt5.QtCore import pyqtSignal,QObject
class Q_O(QObject): # สร้างคลาสของ QObject แล้วใส่ pyqtSignal เป็นแอตทริบิวต์ข้างในนั้น
sanyan = pyqtSignal()
def pumthukkot():
print('ปุ่มถูกกด')
qo.sanyan.emit()
def chongthuktick():
print('ช่องถูกติ๊ก')
qo.sanyan.emit()
def dairapsanyan():
print('ปล่อยสัญญาณ')
qAp = QApplication(sys.argv)
natang = QWidget()
natang.setStyleSheet('font-family: Tahoma; font-size: 19px;')
qo = Q_O() # สร้างออบเจ็กต์ของคลาสที่เราสร้างขึ้นมา
qo.sanyan.connect(dairapsanyan) # เชื่อมต่อสัญญาณ
vbl = QVBoxLayout()
natang.setLayout(vbl)
pumkot = QPushButton('ปุ่มกด')
vbl.addWidget(pumkot)
pumkot.clicked.connect(pumthukkot)
chongtick = QCheckBox('ช่องติ๊ก')
vbl.addWidget(chongtick)
chongtick.toggled.connect(chongthuktick)
natang.show()
qAp.exec_()
sanyan = pyqtSignal()
sanyan.emit() # ได้ AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit'
class Q_O(QObject):
def __init__(self):
self.sanyan = pyqtSignal()
qo = Q_O()
qo.sanyan.emit() # ได้ AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit'
class Q_O(QObject):
sanyan = pyqtSignal()
qo = Q_O()
qo.sanyan.emit() # ไม่มีปัญหา
print(qo.sanyan.__class__) # ได้ <class 'PyQt5.QtCore.pyqtBoundSignal'>
print(hasattr(qo.sanyan,'emit')) # ได้ True
print(hasattr(qo.sanyan,'connect')) # ได้ True
sanyan = pyqtSignal()
print(sanyan.__class__) # <class 'PyQt5.QtCore.pyqtSignal'>
print(hasattr(sanyan,'emit')) # False
print(hasattr(sanyan,'connect')) # False
from PyQt5.QtCore import pyqtBoundSignal
sanyan = pyqtBoundSignal()
sanyan.emit()
import sys
from PyQt5.QtWidgets import QApplication,QSpinBox
def f(n):
print('@'*n)
qAp = QApplication(sys.argv)
klong = QSpinBox()
klong.valueChanged.connect(f)
klong.valueChanged.emit(3) # ได้ @@@
klong.valueChanged.emit(5) # ได้ @@@@@
klong.valueChanged.emit() # ได้ TypeError: valueChanged(self, int) signal has 1 argument(s) but 0 provided
from PyQt5.QtCore import pyqtSignal,QObject
class Q_O(QObject): # สร้างสัญญาณให้รับพารามิเตอร์เป็นตัวแปร str และ int
sanyan = pyqtSignal(str,int)
def f(s,n): # ฟังก์ชันที่จะเชื่อมเข้ากับสัญญาณนี้ก็ใส่พารามิเตอร์ ๒ ตัวด้วย
print(s*n)
qo = Q_O()
qo.sanyan.connect(f)
qo.sanyan.emit('xy',4) # ได้ xyxyxyxy
qo.sanyan.emit('กขค',3) # ได้ กขคกขคกขค
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel,QSlider,QPushButton,QHBoxLayout,QVBoxLayout
from PyQt5.QtCore import pyqtSignal,Qt
class Natang(QWidget):
dukha = pyqtSignal(QSlider)
def __init__(self):
super().__init__()
self.setStyleSheet('font-family: Tahoma; font-size: 17px;')
vbl = QVBoxLayout()
self.setLayout(vbl)
self.khatang = QLabel('')
vbl.addWidget(self.khatang)
self.dukha.connect(self.muealuean)
hbl = QHBoxLayout()
vbl.addLayout(hbl)
hbl.addWidget(QLabel('ก.'))
self.tualuean1 = QSlider() # ตัวเลื่อน ก.
hbl.addWidget(self.tualuean1)
self.tualuean1.setRange(-5,5)
self.tualuean1.setValue(-2)
self.tualuean1.setOrientation(Qt.Horizontal)
self.pumkot1 = QPushButton('ดูค่า') # ปุ่มข้างตัวเลื่อน ข.
hbl.addWidget(self.pumkot1)
self.pumkot1.clicked.connect(lambda: self.dukha.emit(self.tualuean1))
hbl = QHBoxLayout()
vbl.addLayout(hbl)
hbl.addWidget(QLabel('ข.'))
self.tualuean2 = QSlider() # ตัวเลื่อน ข.
hbl.addWidget(self.tualuean2)
self.tualuean2.setOrientation(Qt.Horizontal)
self.tualuean2.setRange(-50,50)
self.tualuean2.setValue(10)
self.pumkot2 = QPushButton('ดูค่า') # ปุ่มข้างตัวเลื่อน ข.
hbl.addWidget(self.pumkot2)
self.pumkot2.clicked.connect(lambda: self.dukha.emit(self.tualuean2))
self.show()
def muealuean(self,tualuean):
if(tualuean==self.tualuean1):
self.khatang.setText('ตัวเลื่อน ก. %d'%(tualuean.value()))
else:
self.khatang.setText('ตัวเลื่อน ข. %d'%(tualuean.value()))
qAp = QApplication(sys.argv)
natang = Natang()
qAp.exec_()
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout
class Natang(QWidget):
def __init__(self):
super().__init__()
vbl = QVBoxLayout()
self.setLayout(vbl)
self.pum1 = QPushButton('ก')
vbl.addWidget(self.pum1)
self.pum1.clicked.connect(self.thukkot)
self.pum2 = QPushButton('ข')
vbl.addWidget(self.pum2)
self.pum2.clicked.connect(self.thukkot)
self.show()
def thukkot(self): # ฟังก์ชันนี้จะทำงานไม่ว่าจะกดปุ่ม ก. หรือ ข.
pum = self.sender() # ดูว่าปุ่มที่ถูกกดคือปุ่มไหน
if(pum==self.pum1):
print('ปุ่ม "ก" ถูกกด')
else:
print('ปุ่ม "ข" ถูกกด')
qAp = QApplication(sys.argv)
natang = Natang()
qAp.exec_()
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ