把东西放在窗户里

时间:2013-04-23 16:12:39

标签: user-interface widget pyside

如何将内容放入主窗口?我想在主窗口中创建一个行编辑(在菜单栏下面,可能在它前面有一些描述性的laber)。这是怎么做到的?我使用网格布局和这个框布局,没有任何作用。 (对于另一个微不足道的问题,只有很少的关于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()

1 个答案:

答案 0 :(得分:0)

我不认为创建具有多重继承的类是建议的最佳实践。如果在FirstClass中找不到属性,则会从左向右搜索(QtGui.QMainWindowQtGui.QWidget)。从我的角度来看,这将变成支持和调试的噩梦。我猜这就是self.layout无法正常工作的原因。

我为QtGui.QMainWindowQtGui.QWidget分别开设了课程。 FirstWindowClass将中央窗口小部件设置为FirstWidgetClassFirstWidgetClassQLineEdit,我继续插入标签。我将QHBoxLayout更改为QGridLayout,以帮助您了解其工作原理。

过去几个月我在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()