Я пытаюсь создать окно с текстовым вводом & поле со списком. На данный момент я просто хочу увидеть текст &, который отображается под соответствующим виджетами.PyQt QVBoxLayout и отсутствующие виджеты?
Я использовал QVBoxLayout(), поскольку я буду добавлять больше материала позже & думал, что это будет простой способ выложить окно.
К сожалению, показывается только поле со списком. Код:
from PyQt4 import QtCore, QtGui
import sys
class Polyhedra(QtGui.QMainWindow):
def __init__(self):
super(Polyhedra, self).__init__()
self.initUI()
def initUI(self):
# Poly names
self.pNames = QtGui.QLabel(self)
polyNameInput = QtGui.QLineEdit(self)
# polyName entry
polyNameInput.textChanged[str].connect(self.onChanged)
# Polytype selection
self.defaultPolyType = QtGui.QLabel("Random polyhedra", self)
polyType = QtGui.QComboBox(self)
polyType.addItem("Random polyhedra")
polyType.addItem("Spheres")
polyType.addItem("Waterman polyhedra")
polyType.activated[str].connect(self.onActivated)
# Layout
vbox = QtGui.QVBoxLayout()
vbox.addWidget(polyNameInput)
vbox.addWidget(self.pNames)
vbox.addWidget(polyType)
vbox.addWidget(self.defaultPolyType)
vbox.addStretch()
# Set up window
self.setGeometry(500, 500, 300, 300)
self.setWindowTitle('Pyticle')
self.show()
# Combo box
def onActivated(self, text):
self.defaultPolyType.setText(text)
self.defaultPolyType.adjustSize()
# Poly names
def onChanged(self, text):
self.pNames.setText(text)
self.pNames.adjustSize()
def main():
app = QtGui.QApplication(sys.argv)
ex = Polyhedra()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Так что происходит здесь? Не хватает ли какой-либо важной директивы для QVBoxLayout()?
Использование Python 2.7 на Win 7 x64 машине с PyQt 4.
EDIT: Дополнительные проблемы (по-прежнему связан с отсутствующими виджетами)
Я исправленный код по следующему осветлению. Затем я добавил больше виджетов, когда выбран какой-либо параметр в combobox (см. Ниже), но эти виджеты не отображаются. Я попытался добавить дочерний виджет к «виджету» под названием «ranPolyWidget» для ввода числового ввода.
# Combo box
def onActivated(self, text):
if text=="Random polyhedra":
self.randomSeedLbl = QtGui.QLabel("Seed: ", self)
randomSeed = QtGui.QLineEdit(self)
randomSeed.textChanged[str].connect(self.setSeed)
ranPolyWidget = QtGui.QWidget(self.widget)
rbox = QtGui.QVBoxLayout(ranPolyWidget)
rbox.addWidget(randomSeed)
self.layout().addWidget(ranPolyWidget)
self.show()
else:
self.defaultPolyType.setText(text)
self.defaultPolyType.adjustSize()
Такая же проблема, как и раньше, без виджетов. Мне не хватает чего-то довольно фундаментального аранта?
Спасибо, что работает, но я получаю следующее сообщение в консоли Python, «QMainWindowLayout :: AddItem: Пожалуйста, используйте QMainWindow API общественности вместо " Означает ли это, что QT не нравится создание дочерних виджетов в QMainWindow? – DrBwts
Это означает, что вам не нравится, когда вы используете встроенный макет для QMainWindow. Обычно для QMainWindow, вы должны сделать это: виджет = QtGui.QWidget (Я) # родитель это self.setCentralWidget (виджет) –
Обновленный мой ответ, чтобы сделать его лучше для QMainWindow. –