آموزش سیگنال ها و شکاف ها در PyQt
آموزش سیگنال ها و شکاف ها در PyQt
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش سیگنال ها و شکاف ها در PyQt خواهیم پرداخت.
پیشنهاد ویژه : آموزش طراحی وب سایت با پایتون
بر خلاف یک برنامه حالت کنسول، که به صورت متوالی اجرا می شود، یک برنامه مبتنی بر رابط کاربری گرافیکی مبتنی بر رویداد است. توابع یا روشها در پاسخ به اقدامات کاربر مانند کلیک روی دکمه، انتخاب یک مورد از مجموعه یا کلیک ماوس و غیره به نام رویدادها اجرا می شوند.
ویجت هایی که برای ساخت رابط کاربری گرافیکی استفاده می شوند به عنوان منبع چنین رویدادهایی عمل می کنند. هر ویجت PyQt، که از کلاس QObject گرفته شده است ، برای انتشار سیگنال در پاسخ به یک یا چند رویداد طراحی شده است. سیگنال به خودی خود هیچ عملی انجام نمی دهد. در عوض، آن را به یک “شکاف” متصل می کند. شکاف می تواند هر تابع پایتون قابل تماس باشد.
در PyQt، ارتباط بین یک سیگنال و یک شکاف را می توان به روش های مختلف به دست آورد. در زیر متداول ترین تکنیک ها آمده است –
1 |
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function) |
یک راه راحت تر برای فراخوانی عملکرد slot_function، هنگامی که سیگنالی توسط یک ویجت منتشر می شود به شرح زیر است –
1 |
widget.signal.connect(slot_function) |
فرض کنید اگر قرار است وقتی روی دکمه ای کلیک می شود یک تابع فراخوانی شود. در اینجا، سیگنال کلیک شده باید به یک تابع قابل فراخوانی متصل شود. این را می توان با هر یک از دو تکنیک زیر به دست آورد –
1 |
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function) |
یا
1 |
button.clicked.connect(slot_function) |
مثال سیگنال ها و شکاف ها در PyQt
در مثال زیر دو شیء QPushButton (b1 و b2) در پنجره QDialog اضافه می شوند. ما می خواهیم توابع ()b1_clicked و ()b2_clicked را به ترتیب روی b1 و b2 کلیک کنیم.
وقتی روی b1 کلیک می شود ، سیگنال ()clicked به تابع ()b1_clicked متصل می شود
1 |
b1.clicked.connect(b1_clicked()) |
وقتی روی b2 کلیک می شود ، سیگنال ()clicked به تابع ()b2_clicked متصل می شود
1 |
QObject.connect(b2, SIGNAL("clicked()"), b2_clicked) |
مثال
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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() |
کد بالا خروجی زیر را تولید می کند –
خروجی
1 2 |
Button 1 clicked Button 2 clicked |
دیدگاه شما