الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طلب مساعدة فى PySide

بدأه Saleh Abbas في 6 أكتوبر 2011 · 8 رد · 990 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعد التحية الكريمة لجميع الأخوة، أود طرح استفسار بسيط ألا وهو :: عند محاولتى لعمل وراثة لـ QtGui.QWidget و QtGui.QMainWindow هكذا

class Pro(QtGui.QWidget, QtGui.QMainWindow):

يحدث ذلك الخطأ،

Traceback (most recent call last):
  File "pro.py", line 6, in <module>
    class Pro(QtGui.QWidget, QtGui.QMainWindow):
TypeError: Error when calling the metaclass bases
    Cannot create a consistent method resolution
order (MRO) for bases QWidget, QMainWindow

وعند عكس ترتيب الوراثة هكذا،

class Pro(QtGui.QMainWindow, QtGui.QWidget):

لا يظهر الخطأ، ولكن لا تظهر أى Widget، أى كأنها لم تكن، فما هى المشكلة، علمًا بأنى أحتاج أن أرث من كلا الفئتين.

شكرًا

تم تعديل هذه المشاركة بواسطة Saleh Abbas في 6 أكتوبر 2011 في 05:29

#2

مالداعي لوراثة MainWindow و Widget ? مع العلم ان QMainWindow يرث من QWidget ?

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

QMainWindow تغنيك عن QWidget لانه كما قال استاذ احمد الاولى ترث من الثانية

class Pro(QtGui.QMainWindow):

اما في مساعد الكيوتي Qt Assistant عليك لاظهار جميع خواص ودوال فئة الضغط على ← List of all members, including inherited members

post-20735-063868300 1317884504_thumb.pn

تحياتي

المرفقات
Qt 4.7- QMainWindow Class Reference.png
1

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#4

ولكن عندما أقوم بعمل وراثة لـ QtGui.QMainWindo لا يظهر أى شيئ خاص بها، وإليكم الكود أيضًا للتأكد

#! /usr/bin/python

import sys
from PySide import QtGui

class Pro(QtGui.QMainWindow):

	def __init__(self):
		super(Pro, self).__init__()
		self.initUI()

	def initUI(self):
		self.statusBar()
		menubar = self.menuBar()
		toolbar = self.addToolBar('Exit')

		exitAction = QtGui.QAction(QtGui.QIcon('/home/saleh/Downloads/exit.png'), '&Exit', self)
		exitAction.setShortcut('Ctrl+Q')
		exitAction.setStatusTip('Exit Now')
		exitAction.triggered.connect(self.close)

		filemenu = menubar.addMenu('&File')
		editmenu = menubar.addMenu('&Edit')
		searchmenu = menubar.addMenu('&Search')
		toolsmenu = menubar.addMenu('&Tools')
		documenu = menubar.addMenu('&Documents')
		helpmenu = menubar.addMenu('&Help')

		filemenu.addAction(exitAction)

		toolbar.addAction(exitAction)

		names = ['Create User', 'Create Group', 'Create DB', 'Controle Permissions',
			'Create ACL', 'Create Quotas', 'Create Dirs', 'Create File',
			'Create Backup', 'Need Help', 'Updates', 'Upgrade']
		grid = QtGui.QGridLayout()
		j = 0
		pos = [(0, 0), (0, 1), (0, 2), (0, 3),
			(1, 0), (1, 1), (1, 2), (1, 3),
			(2, 0), (2, 1), (2, 2), (2, 3)]

		for i in names:
			btn = QtGui.QPushButton(i)
			grid.addWidget(btn, pos[j][0], pos[j][1])
			j = j + 1

		self.setLayout(grid)
		self.setGeometry(250, 250, 600, 600)
		self.setWindowTitle('SPanel')
		self.show()

def main():
	app = QtGui.QApplication(sys.argv)
	ex = Pro()
	sys.exit(app.exec_())

if __name__ == '__main__':
	main()

لا تيظهر أى زر من الأزارا التى قمت بإنشائها ؟

أشكركم

#5

اها

المشكلة انك بتحاول تستخدم grid layout على qmainwindow وهي بالفعل لها layout!!

الاسلوب المنطقي للتعامل مع qmainwindow انك تنشئ ويدجت وتقوم بتحديد الويدجت الرئيسي من خلال setCentralWidget على سبيل المثال

from PyQt4 import QtGui
import sys

class Pro(QtGui.QMainWindow):

        def __init__(self):
                super(Pro, self).__init__()
                self.initUI()

        def initUI(self):
                self.statusBar()
                menubar = self.menuBar()
                toolbar = self.addToolBar('Exit')

                exitAction = QtGui.QAction(QtGui.QIcon('/home/saleh/Downloads/exit.png'), '&Exit', self)
                exitAction.setShortcut('Ctrl+Q')
                exitAction.setStatusTip('Exit Now')
                exitAction.triggered.connect(self.close)

                filemenu = menubar.addMenu('&File')
                editmenu = menubar.addMenu('&Edit')
                searchmenu = menubar.addMenu('&Search')
                toolsmenu = menubar.addMenu('&Tools')
                documenu = menubar.addMenu('&Documents')
                helpmenu = menubar.addMenu('&Help')

                filemenu.addAction(exitAction)

                toolbar.addAction(exitAction)

                names = ['Create User', 'Create Group', 'Create DB', 'Controle Permissions',
                        'Create ACL', 'Create Quotas', 'Create Dirs', 'Create File',
                        'Create Backup', 'Need Help', 'Updates', 'Upgrade']
                class mywidget(QtGui.QWidget):
                        def __init__(self, parent=0):
                            super(mywidget, self).__init__(parent)
                            grid = QtGui.QGridLayout()
                            j = 0
                            pos = [(0, 0), (0, 1), (0, 2), (0, 3),
                                    (1, 0), (1, 1), (1, 2), (1, 3),
                                    (2,0), (2, 1), (2, 2), (2, 3)]

                            for i in names:
                                    btn = QtGui.QPushButton(i)
                                    grid.addWidget(btn, pos[j][0], pos[j][1])
                                    j = j + 1

                            self.setLayout(grid)

                w=mywidget(self)
                self.setCentralWidget(w)
                #self.setLayout(grid)
                self.setGeometry(250, 250, 600, 600)
                self.setWindowTitle('SPanel')
                self.show()

def main():
        app = QtGui.QApplication(sys.argv)
        ex = Pro()
        sys.exit(app.exec_())

if __name__ == '__main__':
        main()

تم تعديل هذه المشاركة بواسطة ahmed_youssef في 7 أكتوبر 2011 في 01:50

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#6

كيف أقوم بعمل هذا، واعذرنى أستاذى فأنا مبتدأ كما تعلمون فى PySide

#7

أضف بعد الـ for loop في مثال ا / احمد

السطور الثلاثة التالية

السطر االاول ننشئ Qwidget المسماه centralWidget

السطر الثاني نضع الـ layout لها بالـ gridLayout المنشاءة سابقا ً

السطر الثالث نحدد الـ QWidget المسماه centralWidget كا centralWidget للنافذة Pro المشتقة من QMainWindow

		#======== add those three lines
		self.centralWidget = QtGui.QWidget(self)
		self.centralWidget.setLayout(grid)
		self.setCentralWidget(self.centralWidget)
		# ======== end

تم تعديل هذه المشاركة بواسطة ihope في 7 أكتوبر 2011 في 00:22

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#8

السلام عليكم يبدو اني لصقت الكود السابق بدلا من الكود المعدل

from PyQt4 import QtGui
import sys

class Pro(QtGui.QMainWindow):

        def __init__(self):
                super(Pro, self).__init__()
                self.initUI()

        def initUI(self):
                self.statusBar()
                menubar = self.menuBar()
                toolbar = self.addToolBar('Exit')

                exitAction = QtGui.QAction(QtGui.QIcon('/home/saleh/Downloads/exit.png'), '&Exit', self)
                exitAction.setShortcut('Ctrl+Q')
                exitAction.setStatusTip('Exit Now')
                exitAction.triggered.connect(self.close)

                filemenu = menubar.addMenu('&File')
                editmenu = menubar.addMenu('&Edit')
                searchmenu = menubar.addMenu('&Search')
                toolsmenu = menubar.addMenu('&Tools')
                documenu = menubar.addMenu('&Documents')
                helpmenu = menubar.addMenu('&Help')

                filemenu.addAction(exitAction)

                toolbar.addAction(exitAction)

                names = ['Create User', 'Create Group', 'Create DB', 'Controle Permissions',
                        'Create ACL', 'Create Quotas', 'Create Dirs', 'Create File',
                        'Create Backup', 'Need Help', 'Updates', 'Upgrade']
                class mywidget(QtGui.QWidget):
                        def __init__(self, parent=0):
                            super(mywidget, self).__init__(parent)
                            grid = QtGui.QGridLayout()
                            j = 0
                            pos = [(0, 0), (0, 1), (0, 2), (0, 3),
                                    (1, 0), (1, 1), (1, 2), (1, 3),
                                    (2,0), (2, 1), (2, 2), (2, 3)]

                            for i in names:
                                    btn = QtGui.QPushButton(i)
                                    grid.addWidget(btn, pos[j][0], pos[j][1])
                                    j = j + 1

                            self.setLayout(grid)

                w=mywidget(self)
                self.setCentralWidget(w)
                #self.setLayout(grid)
                self.setGeometry(250, 250, 600, 600)
                self.setWindowTitle('SPanel')
                self.show()

def main():
        app = QtGui.QApplication(sys.argv)
        ex = Pro()
        sys.exit(app.exec_())

if __name__ == '__main__':
        main()

وبالطبع تستطيع إنشاء الويدجت في صف يشتق من QtGui.QWidget ثم تحديده ك CentralWidget

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#9

أشكرك أستاذى الفاضل، وبارك الله فيكم، واعذرونى إن أطلت الأسئلة

اقتباس

أضف بعد الـ for loop في مثال ا / احمد

السطور الثلاثة التالية

السطر االاول ننشئ Qwidget المسماه centralWidget

السطر الثاني نضع الـ layout لها بالـ gridLayout المنشاءة سابقا ً

السطر الثالث نحدد الـ QWidget المسماه centralWidget كا centralWidget للنافذة Pro المشتقة من QMainWindow

جزاكم الله كل خير على مجهودكم أخى الفاضل.

مواضيع مشابهة