آموزش سیگنال ها و شکاف ها در PyQt

3 سال پیش
آموزش سیگنال ها و شکاف ها در PyQt

 آموزش سیگنال ها و شکاف ها در PyQt

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش سیگنال ها و شکاف ها در PyQt خواهیم پرداخت.

پیشنهاد ویژه : آموزش طراحی وب سایت با پایتون

بر خلاف یک برنامه حالت کنسول، که به صورت متوالی اجرا می شود، یک برنامه مبتنی بر رابط کاربری گرافیکی مبتنی بر رویداد است. توابع یا روشها در پاسخ به اقدامات کاربر مانند کلیک روی دکمه، انتخاب یک مورد از مجموعه یا کلیک ماوس و غیره به نام رویدادها اجرا می شوند.

ویجت هایی که برای ساخت رابط کاربری گرافیکی استفاده می شوند به عنوان منبع چنین رویدادهایی عمل می کنند. هر ویجت PyQt، که از کلاس QObject گرفته شده است ، برای انتشار سیگنال در پاسخ به یک یا چند رویداد طراحی شده است. سیگنال به خودی خود هیچ عملی انجام نمی دهد. در عوض، آن را به یک “شکاف” متصل می کند. شکاف می تواند هر تابع پایتون قابل تماس باشد.

در PyQt، ارتباط بین یک سیگنال و یک شکاف را می توان به روش های مختلف به دست آورد. در زیر متداول ترین تکنیک ها آمده است –

QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)

 

یک راه راحت تر برای فراخوانی عملکرد slot_function، هنگامی که سیگنالی توسط یک ویجت منتشر می شود به شرح زیر است –

widget.signal.connect(slot_function)

 

فرض کنید اگر قرار است وقتی روی دکمه ای کلیک می شود یک تابع فراخوانی شود. در اینجا، سیگنال کلیک شده باید به یک تابع قابل فراخوانی متصل شود. این را می توان با هر یک از دو تکنیک زیر به دست آورد –

QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)

 

یا

button.clicked.connect(slot_function)

 

مثال سیگنال ها و شکاف ها در PyQt

در مثال زیر دو شیء QPushButton (b1 و b2) در پنجره QDialog اضافه می شوند. ما می خواهیم توابع ()b1_clicked  و ()b2_clicked را به ترتیب روی b1 و b2 کلیک کنیم.

وقتی روی b1 کلیک می شود ، سیگنال  ()clicked به تابع ()b1_clicked متصل می شود

b1.clicked.connect(b1_clicked())

 

وقتی روی b2 کلیک می شود ، سیگنال ()clicked به تابع ()b2_clicked  متصل می شود

QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)

 

مثال

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

def window():
   app = QApplication(sys.argv)
   win = QDialog()
   b1 = QPushButton(win)
   b1.setText("Button1")
   b1.move(50,20)
   b1.clicked.connect(b1_clicked)

   b2 = QPushButton(win)
   b2.setText("Button2")
   b2.move(50,50)
   QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)

   win.setGeometry(100,100,200,100)
   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())

def b1_clicked():
   print "Button 1 clicked"

def b2_clicked():
   print "Button 2 clicked"

if __name__ == '__main__':
   window()

 

کد بالا خروجی زیر را تولید می کند –

Signals and Slots Output

خروجی

Button 1 clicked
Button 2 clicked

 

منبع.

 

لیست جلسات قبل آموزش PyQt

  1. آموزش PyQt
  2. آموزش مقدمه PyQt
  3. آموزش Hello World در PyQt
  4. آموزش کلاس های اصلی در PyQt
  5. آموزش استفاده از Qt Designer در PyQt
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه