PyQt通过点击另一个小部件上的按钮来显示一个小部件



我是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。

相关内容

  • 没有找到相关文章

最新更新