我用PyQT4做了一个简单的Hangman游戏。但是我在创建restart()方法时遇到了问题。
我试过了:
class Ui_MainWindow(QtGui.QMainWindow):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(1188, 696)
MainWindow.setStyleSheet(_fromUtf8("background-color: black;"))
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
self.buttons = []
self.setUpKeyboard()
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1188, 25))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
MainWindow.setStatusBar(self.statusbar)
self.pic = QtGui.QLabel(self.mainwindow)
self.pic.setPixmap(QtGui.QPixmap(os.getcwd() + "/img/s0.jpg"))
self.pic.setGeometry(50, 150, 450, 280)
self.pic.setObjectName(_fromUtf8("pic"))
....
def restartGame(self):
self.wordLabel.setText(" ")
for i in range(26):
self.buttons[i].setParent(None)
self.counterLabel.setParent(None)
self.keyWordHidden = ""
self.keyWord = ""
self.pic.setParent(None)
self.setupUi(self.centralwidget)
换句话说,我删除了创建的每个对象。不知何故,我得到了输出:
MainWindow.setCentralWidget(self.centralwidget)
AttributeError: 'QWidget' object has no attribute 'setCentralWidget'
当我想要第二次调用我的setUpUi()时,我已经想不出需要传递什么参数了……
我有另外一个问题。我的重启几乎可以正常工作。但我还有另外一个问题。包含图形元素的像素图(一个接一个地挂起设备构建元素- 10个jpg文件,如img1、img2...)。对于第一个游戏,它工作得很好。在9个错误之后,整个UI应该重新构建……但之后像素图就不显示了..。我试着移除
self.pic.setParent(None)
再次将"img10.jpg“切换为"img1.jpg”。但这无济于事。
发布于 2018-07-30 03:10:08
您在主窗口中创建的中心小部件显然不是主窗口,而是窗口上的小部件。当然,试图将其用作MainWindow
是行不通的。
如果你想重用同一个主窗口,你需要保留它,这样你才能重用它。也许有一个更好的地方可以做到这一点-如果没有任何相关的代码,很难看出如何使用这个类-但一件显而易见的事情就是将它存储在setupUI
中
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(1188, 696)
self.mainwindow = MainWindow
# …
…然后你就可以重用它了:
def restartGame(self):
# …
self.setupUi(self.mainwindow)
https://stackoverflow.com/questions/51583236
复制相似问题