我是PyQt的新手,使用PyQt4。有两个独立的小部件。第一个是showFullScreen()
,第二个是show()
。我想隐藏第二后通过hide()
显示它通过点击按钮第一。尝试了一些东西,谷歌了一下——一无所获。完整代码:
from PyQt4 import QtCore, QtGui
class FileExplorer(QtGui.QWidget):
def __init__(self, parent=None):
super(FileExplorer, self).__init__(parent)
nameLabel = QtGui.QLabel("Name:")
self.nameLine = QtGui.QLineEdit()
addressLabel = QtGui.QLabel("Address:")
self.addressText = QtGui.QTextEdit()
showButton = QtGui.QPushButton('Show widget', self)
showButton.clicked.connect(FileExplor.show)
mainLayout = QtGui.QGridLayout()
mainLayout.addWidget(nameLabel, 0, 0)
mainLayout.addWidget(self.nameLine, 0, 1)
mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop)
mainLayout.addWidget(self.addressText, 1, 1)
mainLayout.addWidget(showButton, 3, 1)
self.setLayout(mainLayout)
# self.setGeometry(300, 300, 250, 150)
# self.sizeHint()
self.setWindowTitle("File Explorer")
class FileExplor(QtGui.QWidget):
def __init__(self, parent=None):
super(FileExplor, self).__init__(parent)
nameLabel = QtGui.QLabel("Name:")
self.nameLine = QtGui.QLineEdit()
addressLabel = QtGui.QLabel("Address:")
self.addressText = QtGui.QTextEdit()
quitButton = QtGui.QPushButton('Quit', self)
quitButton.clicked.connect(self.hide)
mainLayout = QtGui.QGridLayout()
mainLayout.addWidget(nameLabel, 0, 0)
mainLayout.addWidget(self.nameLine, 0, 1)
mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop)
mainLayout.addWidget(self.addressText, 1, 1)
mainLayout.addWidget(quitButton, 3, 1)
self.setLayout(mainLayout)
#self.setGeometry(300, 300, 250, 150)
self.sizeHint()
self.setWindowTitle("File Explorer")
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
fileExplorer = FileExplorer()
fileExplorer.showFullScreen()
# fileExplorer.show()
#
fileExplor = FileExplor()
fileExplor.show()
sys.exit(app.exec_())
逻辑我想做什么在最后:
- 第一个小部件-主块(全屏)
- 其他小部件-可以通过点击第一个 按钮显示
听起来你想要的是一个非模态对话框。
在您发布的代码中,将FileExplor
类更改为QDialog
:
class FileExplor(QtGui.QDialog):
然后添加一个信号处理程序到主FileExplorer
类:
def handleShowDialog(self):
if not hasattr(self, 'dialog'):
self.dialog = FileExplor(self)
self.dialog.show()
最后将按钮连接到处理程序:
showButton.clicked.connect(self.handleShowDialog)
我没有在这台机器上安装PyQt4,所以我无法测试这个。但这是你的问题:
showButton.clicked.connect(FileExplor.show)
您没有引用下面创建的小部件对象,您引用的是类对象fileexplorer。
fileExplorer = FileExplorer()
fileExplorer.showFullScreen()
fileExplor = FileExplor()
fileExplor.show()
你能试着把FileExplor
作为FileExplorer
的参数吗?此外,尝试将FileExplor
命名为其他名称,如DependentFileExplorer
(此处了解命名约定),并执行以下操作:
from PyQt4 import QtCore, QtGui
class FileExplorer(QtGui.QWidget):
def __init__(self, dependent, parent=None):
super(FileExplorer, self).__init__(parent)
self.dependent = dependent
nameLabel = QtGui.QLabel("Name:")
self.nameLine = QtGui.QLineEdit()
addressLabel = QtGui.QLabel("Address:")
self.addressText = QtGui.QTextEdit()
showButton = QtGui.QPushButton('Show widget', self)
showButton.clicked.connect(self.dependent.show)
mainLayout = QtGui.QGridLayout()
mainLayout.addWidget(nameLabel, 0, 0)
mainLayout.addWidget(self.nameLine, 0, 1)
mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop)
mainLayout.addWidget(self.addressText, 1, 1)
mainLayout.addWidget(showButton, 3, 1)
self.setLayout(mainLayout)
self.setWindowTitle("File Explorer")
class DependentFileExplorer(QtGui.QWidget):
def __init__(self, parent=None):
super(DependentFileExplorer, self).__init__(parent)
nameLabel = QtGui.QLabel("Name:")
self.nameLine = QtGui.QLineEdit()
addressLabel = QtGui.QLabel("Address:")
self.addressText = QtGui.QTextEdit()
quitButton = QtGui.QPushButton('Quit', self)
quitButton.clicked.connect(self.hide)
mainLayout = QtGui.QGridLayout()
mainLayout.addWidget(nameLabel, 0, 0)
mainLayout.addWidget(self.nameLine, 0, 1)
mainLayout.addWidget(addressLabel, 1, 0, QtCore.Qt.AlignTop)
mainLayout.addWidget(self.addressText, 1, 1)
mainLayout.addWidget(quitButton, 3, 1)
self.setLayout(mainLayout)
#self.setGeometry(300, 300, 250, 150)
self.sizeHint()
self.setWindowTitle("File Explorer")
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
dependent = DependentFileExplorer()
fileExplorer = FileExplorer(dependent)
fileExplorer.showFullScreen()
dependent.show()
sys.exit(app.exec_())
现在FileExplorer接受DependentFileExplorer作为参数。
必须在FileExplorer之前创建DependentFileExplorer。