如何在python中的框架内放置小部件

时间:2014-01-14 14:22:29

标签: python widget pyqt maya

我是python的新手,但目前我在这里遇到一些问题我无法让我的东西适合窗口的宽度。 我试图以这样的方式设置它:  例如。名称按钮

顺便说一句,我正在使用Maya来整合和运行我的东西。

如果我将它设置为中央,它适合但它遍布整个地方,因为我只希望它只占用一部分。那么有什么方法让我很好地适应它吗? 顺便说一句,如果可能,可以使用我目前的编码来完成吗?

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sip
import maya.OpenMayaUI as mui 
import os

class MainWindow(QMainWindow):   
    def __init__(self, parent = None):
        QMainWindow.__init__(self,parent)
        self.resize(400,800)
        self.setWindowTitle("GetShots")
        self.pubDock = SetShotInfo()
        self.pubDW = QDockWidget(self.tr(""), self)
        self.pubDW.setWidget(self.pubDock)
       # self.setCentralWidget(self.pubDW)

def getMayaWindow():
    ptr = mui.MQtUtil.mainWindow()
    return sip.wrapinstance(long(ptr), QObject)

def main():
    global app
    global form
    app = qApp
    form = MainWindow(getMayaWindow())
    form.show() 

class GetShot(QFrame):
    def __init__(self, parent = None, display=None):
        QFrame.__init__(self, parent)
        self.createWidgets()
        self.createLayout()      

    def createWidgets(self):
        self.showLabel = QLabel('Show')
        self.showName = QLineEdit()

        self.showName.setText(str(os.environ['SHOW']))

        self.shotLabel = QLabel('Shot Filter')
        self.shotName = QLineEdit()
        self.showButton = QPushButton('Set Show')
        self.showButton.setMaximumWidth(200)
        self.shotButton = QPushButton('Filter Shots')
        self.shotButton.setMaximumWidth(200)

        self.rootLabel = QLabel('Change Root')
        self.rootButton = QComboBox()

    def createLayout(self):       
        # Sets the Layout of Show and Shot
        setShowLayout = QHBoxLayout()
        setShowLayout.addWidget(self.showLabel)
        setShowLayout.addWidget(self.showName)
        setShowLayout.addWidget(self.showButton)

        setShotLayout = QHBoxLayout()
        setShotLayout.addWidget(self.shotLabel)
        setShotLayout.addWidget(self.shotName)
        setShotLayout.addWidget(self.shotButton)

        # Sets the Change Root Layout
        chgRootLayout = QHBoxLayout()
        chgRootLayout.addWidget(self.rootLabel)
        chgRootLayout.addWidget(self.rootButton)

        mainLayout = QVBoxLayout()
        mainLayout.addLayout(setShowLayout)
        mainLayout.addLayout(setShotLayout)
        mainLayout.addLayout(chgRootLayout)
        self.setLayout(mainLayout)

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:1)

您需要使用布局,合并verticalhorizontal并使用小部件的size policy来根据需要调整它们。

这是一个简单的例子:

import sys
from PyQt4 import QtCore, QtGui

class ButtonContainer(QtGui.QWidget):
  def __init__(self):
    super(ButtonContainer, self).__init__()
    self.initUI()

  def initUI(self):
    self.setGeometry( 150, 150, 650, 350)
    btn = QtGui.QPushButton('Name button', self)
    btn.setSizePolicy( QtGui.QSizePolicy( QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed ) )
    vbox = QtGui.QVBoxLayout()
    vbox.addWidget( btn )
    self.setLayout(vbox)
    self.show()

app = QtGui.QApplication(sys.argv)
ex = ButtonContainer()
sys.exit(app.exec_())

评论者正确地建议 QtDesigner ,如果您更愿意自己编写代码,至少有一个模拟 ui 文件,您可以在其中以交互方式播放布局和规模政策,这真的很有帮助。