0

メインウィンドウに何かを配置するにはどうすればよいですか? メインウィンドウに行編集を作成したい(メニューバーの下、おそらくその前に説明ラベルがあります)。これはどのように行われますか?グリッド レイアウトとこのボックス レイアウトを使用しましたが、何も機能しません。(別の些細な質問は申し訳ありませんが、pyside に関するチュートリアルはほとんどなく、そのほとんどは、ボタンなどを使用して単一のウィンドウを作成する方法のみをカバーしています。)

import sys
from PySide import QtGui, QtCore, QtWebKit


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

    def __init__(self):
        super(FirstClass, self).__init__()
        self.startingUI()

    def startingUI(self):

        self.setWindowTitle('Hauptfenster')
        self.resize(800, 400)
        self.statusBar()

        #Menueinstellungen an sich

        menue = self.menuBar()

        #Actions des Menues:
        #datei menue
        menuleiste_datei = menue.addMenu('File')

        datei_exit = QtGui.QAction('Exit', self)
        datei_exit.setStatusTip('Close the programm')
        menuleiste_datei.addAction(datei_exit)
        datei_exit.triggered.connect(self.close)

        #Einstellungen menue
        menuleiste_configurations = menue.addMenu('Configurations')
        configurations_settings = QtGui.QAction('Settings', self)
        configurations_settings.setStatusTip('Configurations(Settings)')
        menuleiste_configurations.addAction(configurations_settings)
        configurations_settings.triggered.connect(self.newwindow)

        self.lineedit = QtGui.QLineEdit()
        self.layout = QtGui.QHBoxLayout()
        self.layout.addWidget(self.lineedit)
        self.setLayout(self.layout)
        self.show()

    def newwindow(self):
        self.wid = QtGui.QWidget()
        self.wid.resize(250, 150)
        self.setWindowTitle('NewWindow')
        self.wid.show()

def main():

    app = QtGui.QApplication(sys.argv)
    start = FirstClass()
    sys.exit(app.exec_())

if __name__== '__main__':
    main()
4

1 に答える 1

0

多重継承を持つクラスを作成することが推奨されるベスト プラクティスだとは思いません。属性が に見つからない場合は、FirstClass左から右 (QtGui.QMainWindowまでQtGui.QWidget) に検索します。私の観点からすると、これはサポートとデバッグにとって悪夢になるでしょう。私の推測では、これが self.layout が正しく機能していない理由です。

と の別々のクラスを作成しましQtGui.QMainWindowQtGui.QWidgetFirstWindowClass中央ウィジェットを として設定しますFirstWidgetClassFirstWidgetClassあなたQLineEditと私は先に進み、ラベルを挿入しました。それがどのように機能するかを理解できるように変更QHBoxLayoutしました。QGridLayout

この 2 か月間の Python と Pyside に関する私の学習経験からのヒント:

  1. いつでも PyQt の例を見ることができ、大部分は PySide モジュールで直接動作することを忘れないでください。
  2. 多くのモジュールには簡単な例があるため、http://srinikom.github.io/pyside-docs/index.htmlを参照することをお勧めします。
  3. 私の個人的なプロジェクトでは、Qt の質問に対する多くの解決策が C++ で書かれていたので、恐れずに Python に変換してください。

    import sys
    from PySide import QtGui, QtCore, QtWebKit
    
    class FirstWindowClass(QtGui.QMainWindow):
        def __init__(self):
            super(FirstWindowClass, self).__init__()
    
            self.setWindowTitle('Hauptfenster')
            self.resize(800, 400)
            self.statusBar()
    
            # Set central widget that expands to fill your window
            self.main_widget = FirstWidgetClass(self)
            self.setCentralWidget(self.main_widget)
    
            #Menueinstellungen an sich
    
            menue = self.menuBar()
    
            #Actions des Menues:
            #datei menue
            menuleiste_datei = menue.addMenu('File')
    
            datei_exit = QtGui.QAction('Exit', self)
            datei_exit.setStatusTip('Close the programm')
            menuleiste_datei.addAction(datei_exit)
            datei_exit.triggered.connect(self.close)
    
            #Einstellungen menue
            menuleiste_configurations = menue.addMenu('Configurations')
            configurations_settings = QtGui.QAction('Settings', self)
            configurations_settings.setStatusTip('Configurations(Settings)')
            menuleiste_configurations.addAction(configurations_settings)
            configurations_settings.triggered.connect(self.newwindow)
    
            # Open the window
            self.show()
    
        def newwindow(self):
            self.wid = QtGui.QWidget()
            self.wid.resize(250, 150)
            self.wid.setWindowTitle('NewWindow')
            self.wid.show()
    
    
    class FirstWidgetClass(QtGui.QWidget):
        def __init__(self, parent=None):
            super(FirstWidgetClass, self).__init__()
    
            self.label_example = QtGui.QLabel('Enter Data:')
    
            self.lineedit = QtGui.QLineEdit()
            self.layout = QtGui.QGridLayout()
            self.layout.addWidget(self.label_example, 0, 0)
            self.layout.addWidget(self.lineedit, 0, 1)
            self.setLayout(self.layout)
            self.show()
    
    
    def main():
    
        app = QtGui.QApplication(sys.argv)
        start = FirstWindowClass()
        sys.exit(app.exec_())
    
    if __name__== '__main__':
        main()
    
于 2013-04-24T22:19:48.047 に答える