0

'DataClass'にメインウィンドウがあります。別のクラス(HelloClass)にウィジェットを作成するにはどうすればよいですか。

test.py

import sys
import label
from PyQt4 import QtGui, QtCore

class DataClass(QtGui.QMainWindow):
    def __init__(self):
        super(DataClass, self).__init__()
        self.window()

    def window(self):
        ex=label.HelloClass(self)
        ex.print_label()

def main():
    app = QtGui.QApplication(sys.argv)
    ob=DataClass()
    ob.show()
    sys.exit(app.exec_())

if __name__=='__main__':
    main()

これは「label.py」ファイルです。

import sys
from PyQt4 import QtGui, QtCore

class HelloClass(QtGui.QMainWindow):

    def print_label(self):
        self.la=QtGui.QLabel("hello",self)
        self.la.move(300,100)
        self.la.show()

import sys
from PyQt4 import QtGui, QtCore

class HelloClass(QtGui.QMainWindow):

    def print_label(self):
        self.la=QtGui.QLabel("hello",self)
        self.la.move(300,100)
        self.la.show()
4

1 に答える 1

1

2つのクラスを持つことはできません。QMainWindowから継承するべきではありませQMainWindowHelloClass。また、親をラベルに設定する場合は、それを自分のに設定しDataClassますQMainWindow

class HelloClass(object):
    def print_label(self, parent):
        self.la = QtGui.QLabel("hello", parent)
        self.la.move(300, 100)
        self.la.show()

class DataClass(QtGui.QMainWindow):
    def __init__(self):
        super(DataClass, self).__init__()
        self.window()

    def window(self):
        ex = label.HelloClass()
        ex.print_label(self)

しかし、正直なところ、PyQtを使用してGUIを作成する最良の方法は、QtDesignerを使用することです。QtDesignerを使用して.uiファイルを作成してから、コマンドを使用して.pyファイルを作成しますpyuic4 your.ui -o ui_your.py

-更新-

QtDesignerによって作成されたGUIを使用するためのコントローラークラスは次のようになります。

from ui_objects import Ui_Objects  # this is class created with QtDesigner, name of class is a 'Ui_' + name of main Object in QtDesigner    

class Objects(QtGui.QWidget):

    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.ui = Ui_Objects()
        self.ui.setupUi(self)

    # then you can add your own code, in example connect your own methods to actions for widgets
于 2013-02-04T15:59:00.960 に答える