我用pyqt5创建了一个带有2个按钮的主窗口,现在我想添加一个组合框。但如果我保留App(QMainWindow),组合框就不会显示。只有我写App(QWidgets)才会显示。有没有办法在主窗口中添加组合框?这是我的代码:
class App(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Phan mem quan ly tai lieu- Tuan tien mom'
self.left = 200
self.top = 200
self.width = 320
self.height = 200
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
button = QPushButton('chaychuongtrinh', self)
button.setToolTip('bam vao nut nay de chay chuong trinh')
button.move(100, 70)
button.clicked.connect(self.on_click)
button1 = QPushButton('kiemtra', self)
button1.setToolTip('kiem tra thong tin')
button1.move(200, 70)
button1.clicked.connect(self.on_click)
layout = QHBoxLayout()
self.cb = QComboBox()
self.cb.addItem("C")
self.cb.addItem("C++")
self.cb.addItems(["Java", "C#", "Python"])
self.cb.currentIndexChanged.connect(self.selectionchange)
layout.addWidget(self.cb)
self.setLayout(layout)
self.setWindowTitle("combo box demo")
self.show()
def selectionchange(self,i):
print ("Items in the list are :")
print(self.cb.currentText())
答案 0 :(得分:0)
每个小部件都需要parent
。
对于QPushButton
,您使用self
作为父级。对于QComboBox
使用self
作为父级
self.cb = QComboBox(self)
答案 1 :(得分:0)
QMainWindow
是一个特殊的小部件,它已经有了一个布局,所以我们不应该添加另一个布局,如图所示:
在这种情况下,您必须创建一个新窗口小部件并将其放在中央窗口小部件中,在这个新窗口小部件中,我们必须将窗口小部件放置为QPushButton或QComboBox。
在您的情况下,QPushButton
是可见的,因为如果窗口小部件传递了父窗口,它将位于父窗口的位置(0,0),然后您已将其移动到具有{的特定位置{1}}。相反,组合框没有父母,所以它不可见。
此外,如果您要使用布局,则不应使用move()函数,因为布局将在整个窗口小部件中展开。在以下示例中,不使用布局:
move()
布局:
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.widget = QWidget(self)
self.setCentralWidget(self.widget)
button = QPushButton('chaychuongtrinh', self.widget)
button.move(100, 70)
button.setToolTip('bam vao nut nay de chay chuong trinh')
button.clicked.connect(self.on_click)
button1 = QPushButton('kiemtra', self.widget)
button1.setToolTip('kiem tra thong tin')
button1.clicked.connect(self.on_click)
button1.move(200, 70)
self.cb = QComboBox(self.widget)
self.cb.addItem("C")
self.cb.addItem("C++")
self.cb.addItems(["Java", "C#", "Python"])
self.cb.currentIndexChanged.connect(self.selectionchange)
self.cb.move(300, 70)
self.setWindowTitle("combo box demo")