آموزش رابط چندین سند در PyQt

3 سال پیش

 آموزش رابط چندین سند در PyQt

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش رابط چندین سند در PyQt خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پروژه محور پایتون

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

یک راه برای نمایش همزمان چندین پنجره، ایجاد آنها به عنوان پنجره های مستقل است. این را SDI (رابط تک سند) می نامند. این به منابع حافظه بیشتری نیاز دارد زیرا هر پنجره ممکن است سیستم منو ، نوار ابزار و غیره خود را داشته باشد.

برنامه های کاربردی MDI (Multiple Document Interface) منابع حافظه کمتری مصرف می کنند. پنجره های فرعی در داخل ظرف اصلی به نسبت یکدیگر قرار گرفته اند. ویجت ظرف QMdiArea نام دارد.

ویجت QMdiArea به طور کلی ویجت مرکزی شی QMainWondow را اشغال می کند. پنجره های کودک در این منطقه نمونه هایی از کلاس QMdiSubWindow هستند. امکان تنظیم هر QWidget به عنوان ویجت داخلی شیء subWindow وجود دارد. پنجره های فرعی در ناحیه MDI را می توان بصورت آبشاری یا کاشی مرتب کرد.

جدول زیر روشهای مهم کلاس QMdiArea و کلاس QMdiSubWindow را لیست می کند –

متد و توضیحات
۱ ()addSubWindow

ویجت را به عنوان زیر پنجره جدید در ناحیه MDI اضافه می کند

۲ ()removeSubWindow

ویجتی را که ویجت داخلی یک زیر پنجره است حذف می کند

۳ ()setActiveSubWindow

زیر پنجره را فعال می کند

۴ ()cascadeSubWindows

زیر پنجره ها را در MDiArea به صورت آبشار مرتب می کند

۵ ()tileSubWindows

زیر پنجره ها را در MDiArea به صورت کاشی مرتب می کند

۶ ()closeActiveSubWindow

زیر پنجره فعال را می بندد

۷ ()subWindowList

لیست زیر پنجره های ناحیه MDI را برمی گرداند

۸ ()setWidget

QWidget را به عنوان ویجت داخلی نمونه QMdiSubwindow تنظیم می کند

 

شی QMdiArea سیگنال subWindowActivated () را منتشر می کند در حالی که سیگنال ()windowStateChanged توسط شی QMdisubWindow منتشر می شود.

مثال

در مثال زیر، پنجره سطح بالا شامل QMainWindow دارای منو و MdiArea است.

self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file = bar.addMenu("File")

file.addAction("New")
file.addAction("cascade")
file.addAction("Tiled")

 

سیگنال ()Triggered منو به تابع ()actionaction وصل شده است.

file.triggered [QAction] .connect (self.windowaction)

 

اکشن جدید منو یک زیر پنجره در ناحیه MDI با عنوان اضافه شده به آن اضافه می کند.

MainWindow.count = MainWindow.count+1
sub = QMdiSubWindow()
sub.setWidget(QTextEdit())
sub.setWindowTitle("subwindow"+str(MainWindow.count))
self.mdi.addSubWindow(sub)
sub.show()

 

دکمه های آبشار و کاشی منو ترتیب زیر پنجره های نمایش داده شده را به ترتیب به صورت آبشار و کاشی کاری می کند.

کد کامل به شرح زیر است –

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

class MainWindow(QMainWindow):
   count = 0
    
   def __init__(self, parent = None):
      super(MainWindow, self).__init__(parent)
      self.mdi = QMdiArea()
      self.setCentralWidget(self.mdi)
      bar = self.menuBar()
        
      file = bar.addMenu("File")
      file.addAction("New")
      file.addAction("cascade")
      file.addAction("Tiled")
      file.triggered[QAction].connect(self.windowaction)
      self.setWindowTitle("MDI demo")
        
   def windowaction(self, q):
      print "triggered"
        
   if q.text() == "New":
      MainWindow.count = MainWindow.count+1
      sub = QMdiSubWindow()
      sub.setWidget(QTextEdit())
      sub.setWindowTitle("subwindow"+str(MainWindow.count))
      self.mdi.addSubWindow(sub)
      sub.show()
        
   if q.text() == "cascade":
      self.mdi.cascadeSubWindows()
        
   if q.text() == "Tiled":
      self.mdi.tileSubWindows()
        
   def main():
      app = QApplication(sys.argv)
      ex = MainWindow()
      ex.show()
      sys.exit(app.exec_())
    
   if __name__ == '__main__':
      main()

 

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

Multiple Document Interface Output1

Multiple Document Interface Output2

Multiple Document Interface Output3

 

منبع.

 

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

  1. آموزش PyQt
  2. آموزش مقدمه PyQt
  3. آموزش Hello World در PyQt
  4. آموزش کلاس های اصلی در PyQt
  5. آموزش استفاده از Qt Designer در PyQt
  6. آموزش سیگنال ها و شکاف ها در PyQt
  7. آموزش مدیریت طرح بندی در PyQt
  8. آموزش ویجت های کلی در PyQt
  9. آموزش کلاس QDialog در PyQt
  10. آموزش کلاس QMessageBox در PyQt
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه