اتصال عملکرد به QPushButton با connect

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/07/24
  • تعداد بازدید: 2

در این قسمت می‌خواهیم یک عملیات ساده را به دکمه اختصاص دهیم تا با هر کلیک یک خروجی نمایش داده شود. در 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() انجام می‌شود و نیازی به پرانتز در زمان اتصال نیست. هر بار که دکمه کلیک شود، تابع مربوطه اجرا شده و متن دکمه بروزرسانی می‌شود.

نمونه خروجی:

 

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.