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.QMainWindowto QtGui.QWidget) 搜索。从我的角度来看,这将变成支持和调试的噩梦。我猜这就是 self.layout 无法正常工作的原因。

QtGui.QMainWindow我为和制作了单独的课程QtGui.QWidgetFirstWindowClass将中央小部件设置为FirstWidgetClass. FirstWidgetClass有你QLineEdit和我继续插入标签。我改为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()
    
于 2013-04-24T22:19:48.047 回答