我在 Python2 的 QMainWindow 中看不到 QLabel 和 QLineEdit 小部件

Posted

技术标签:

【中文标题】我在 Python2 的 QMainWindow 中看不到 QLabel 和 QLineEdit 小部件【英文标题】:I can't see QLabel and QLineEdit widgets in my QMainWindow in Python2 【发布时间】:2016-05-24 08:14:18 【问题描述】:

我写了这段代码,但我不明白为什么小部件 QLabel 和 QLineEdit 不显示?我必须把他们放在另一个班级吗?是 Python2.7 和 PySide。

这是我运行代码时窗口的样子:

#!/usr/bin/env python
# coding: utf-8

import sys
import crypt
from PySide import QtGui

class MyApp(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MyApp, self).__init__(parent)
        self.initui()

    def initui(self):
        # main window size, title and icon
        self.setMinimumSize(500, 350)
        self.setWindowTitle("Calculate a password hash in Linux")

        # lines for entering data
        self.saltLabel = QtGui.QLabel("Salt:")
        self.saltLine = QtGui.QLineEdit()
        self.saltLine.setPlaceholderText("e.g. $6$xxxxxxxx")

        # set layout
        grid = QtGui.QGridLayout()
        grid.addWidget(self.saltLabel, 0, 0)
        grid.addWidget(self.saltLine, 1, 0)

        self.setLayout(grid)

        # show a widget
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    instance = MyApp()
    instance.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

【问题讨论】:

您不需要QMainWindow。您应该使用QDialog 或简单地使用QWidget 【参考方案1】:

QWidget 用作centralWidget 怎么样

widget = QWidget()
widget.setLayout(grid)
#add your widgets and...
self.setCentralWidget(widget)

你不需要打电话给show(),因为你在你的__main__中打电话

这取决于所有者,但我建议将QWidget 转接,并让您的QMainWindow 实例尽可能简洁。一个实现可能是:

class MyWidget(QtGui.QWidget):

    def __init__(self, *args):
        QtGui.QWidget.__init__(self, *args)
        grid = QtGui.QGridLayout()
        #and so on...

并在您的QMainWindow 实例中将其用作widget。这大大提高了可读性、可维护性和可重用性:)

【讨论】:

好的,当我这样做时(自己不是这个),小部件确实显示但在左上角,一个在另一个。但是,我用 QWidget 切换了 QMainWindow ,现在可以了。谢谢! 您是否尝试过更新的答案? setCentralWidget 应该填写您的 QMainWindow 实例。如果你不能让上面的例子工作,请让我更新。我也可以给出更详细的答案。 我保留了 QMainWindow,在网格中添加了 QLabel 和 QLineEdit 小部件,并将小部件设置为 QMainWindow 中的中心。成功了,谢谢!

以上是关于我在 Python2 的 QMainWindow 中看不到 QLabel 和 QLineEdit 小部件的主要内容,如果未能解决你的问题,请参考以下文章

对 QMainWindow 的大小调整做出反应以调整小部件的大小

PyQt 在 QMainWindow 中创建 QDialog

访问 QMainWindow 类变量 - Pyside/PyQt

如何设置 QMainWindow 的 Windows 任务栏标题?

在屏幕中间显示 QMainwindow

OpenCV进程运行时QMainWindow没有响应