در این قسمت میخواهیم یک عملیات ساده را به دکمه اختصاص دهیم تا با هر کلیک یک خروجی نمایش داده شود. در PyQt6 برای این کار از سیستم signal-slot استفاده میکنیم.
# Function Example
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel
# function to be executed when button is clicked
def btn_pushed():
print("clicked")
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("icc-aria gui app")
layout = QVBoxLayout()
# creating a label
label = QLabel("Push the button to see the action")
layout.addWidget(label)
# creating a button
btn = QPushButton("Click Me!")
# connecting button click to function
btn.clicked.connect(btn_pushed)
layout.addWidget(btn)
window.setLayout(layout)
window.show()
sys.exit(app.exec())
# OOP Example
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel
class App(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("icc-aria gui app")
layout = QVBoxLayout()
# creating a label
self.label = QLabel("Push the button to see the action")
layout.addWidget(self.label)
# creating a button
self.btn = QPushButton("Click Me!")
self.btn.clicked.connect(self.btn_pushed)
layout.addWidget(self.btn)
self.setLayout(layout)
def btn_pushed(self):
print("clicked")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec())
حال میخواهیم شمارندهای بسازیم که تعداد کلیکها روی دکمه را نمایش دهد و با هر بار کلیک مقدار آن افزایش یابد. این کار با استفاده از یک متغیر و تغییر متن دکمه انجام میشود.
# Function Example
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
counter = 0
def btn_pushed():
global counter
counter += 1
btn.setText(f"Clicked Me {counter} time(s)")
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("icc-aria gui app")
layout = QVBoxLayout()
btn = QPushButton("Click Me")
btn.clicked.connect(btn_pushed)
layout.addWidget(btn)
window.setLayout(layout)
window.show()
sys.exit(app.exec())
# OOP Example
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
class App(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("icc-aria gui app")
self.counter = 0
layout = QVBoxLayout()
self.btn = QPushButton("Click Me")
self.btn.clicked.connect(self.btn_pushed)
layout.addWidget(self.btn)
self.setLayout(layout)
def btn_pushed(self):
self.counter += 1
self.btn.setText(f"Clicked Me {self.counter} time(s)")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec())
نکته: در PyQt6 اتصال تابع به دکمه با استفاده از متد clicked.connect() انجام میشود و نیازی به پرانتز در زمان اتصال نیست. هر بار که دکمه کلیک شود، تابع مربوطه اجرا شده و متن دکمه بروزرسانی میشود.
نمونه خروجی: