pyqt5 'QWidget' object has no attribute 'setCentralWidget'

Posted 星光夏眠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyqt5 'QWidget' object has no attribute 'setCentralWidget'相关的知识,希望对你有一定的参考价值。

在我刚使用PyQt5的时候,我运行的时候出现以下报错:

pyqt5 \'QWidget\' object has no attribute \'setCentralWidget\'

这种错误我用了一种方法来解决:

在运行的主函数里面,原本是这样的

if __name__ == \'__main__\':
    app = QtWidgets.QApplication(sys.argv)
    widgets = QtWidgets.QWidget()
    ui = MainWin()
    ui.main_ui.setupUi(widgets)
    widgets.show()
    ui.run_function()
    sys.exit(app.exec_())

然后修改成这样:

if __name__ == \'__main__\':
    app = QtWidgets.QApplication(sys.argv)
    widgets = QtWidgets.QMainWindow()
    ui = MainWin()
    ui.main_ui.setupUi(widgets)
    widgets.show()
    ui.run_function()
    sys.exit(app.exec_())

除了这种方法,Stack Overflow上还有几种不知道可不可行:
1:

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent=parent)
        ui = Ui_MainWindow()
        ui.setupUi(self)
 
 
import sys
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent=parent)
        self.setupUi(self)
 
 
 
import sys
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

PyQt - QWidget - 仅显示标题栏

【中文标题】PyQt - QWidget - 仅显示标题栏【英文标题】:PyQt - QWidget - Show Title bar only 【发布时间】:2016-12-11 13:14:36 【问题描述】:

我正在我的应用程序中打开多个文件。对于大文件,打开需要几秒钟,因此我显示了一个带有打开文件状态的 QWidget。

主应用程序向 qwidget 传递一个信号,并且标题栏得到更新。

我使用setWindowFlags(Qt.WindowTitleHint) 去掉了最小化/最大化按钮。

    这样做是否正确?

    QWidget 可以只显示标题栏吗?

#This is the method for reading files in the main class
#Some other method passes filenames to this method
def readfiles(self,filenames):
    fopenstins=FileOpenStatusWidget()
    fopenstins.show()
    for i in range(len(filenames)): # Read files one by one
        self.emit(SIGNAL('fopenstsig'),i+1,len(filenames)) 
        #### More Code for reading files#####

class FileOpenStatusWidget(QtGui.QWidget):
    def __init__(self):
        super(FileOpenStatusWidget, self).__init__()
        self.connect(main,SIGNAL('fopenstsig'),self.qwrtt)
        self.layout = QtGui.QVBoxLayout()
        self.status=QtGui.QLabel()
        self.layout.addWidget(self.status) # This does not work -- Window remains blank 
        self.setWindowFlags(Qt.WindowTitleHint)
        self.setLayout(self.layout)


     def qwrtt(self,openedfiles,totalfiles):
         self.status.setText('Opening File '+str(openedfiles)+'/'+str(totalfiles))
         if openedfiles==totalfiles:
            self.hide()
         else:
            self.setWindowTitle(self.status.text())

【问题讨论】:

欢迎来到 SO。可以给个代码sn-p吗? 已更新代码 sn-p...(害怕) 我最初的想法是添加一个进度条,但即使添加了小部件,窗口仍然是空白的。唯一有效的是标题栏。 这个问题是关于拥有一个仅由其标题栏组成的窗口还是关于向 QWidget 添加标签?我认为您上面的代码应该可以工作,您的 Window 保持空白的唯一原因是标签中没有文本,人们会看到。 只是一个问题:反过来,即没有标题栏和框架边框的窗口是否适合您?这可以使用setWindowFlags(QtCore.Qt.FramelessWindowHint) 来实现。 【参考方案1】:

使用标志组合:Qt.CustomizeWindowHint | Qt.WindowTitleHint

窗口图标和关闭按钮由默认添加的Qt.WindowSystemMenuHint 控制。 Qt.CustomizeWindowHint 禁用所有默认提示。

【讨论】:

好的..这去掉了exe图标和关闭按钮,但标题栏下方的空白窗口仍然存在。

以上是关于pyqt5 'QWidget' object has no attribute 'setCentralWidget'的主要内容,如果未能解决你的问题,请参考以下文章

如何制作*** QWidget 模态?

在 PyQt5 中通过对象#id 设置样式

解决 No module named 'PyQt5.QtWebKitWidgets' 'PyQt5.QtWebEngineWidgets'

PyQt5 样式表用于 QWidget 的孩子更改 QWidget

Pyqt5_QWidget

setParent 的 PyQt5 行为以显示没有布局的 QWidget