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_())
逻辑我最终想要做什么:
- 第一个小部件 - 主块(全屏)
- 其他小部件 - 可以通过单击第一个中的按钮来显示
I'm new in PyQt and using PyQt4. Have two independent widgets. First of them showFullScreen()
and second show()
. I want after hiding second by hide()
show it by clicking button on first. Tried something and googled - nothing.
Full code:
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_())
Logic what i want make in the end:
- first widget - main block (fullscreen)
- other widgets - can be show by clicking buttons in first
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
听起来您想要的是一个无模式对话框。
在您发布的代码中,将
FileExplor
类更改为QDialog
:然后向主
FileExplorer
类添加信号处理程序:最后连接按钮到处理程序:
It sounds like what you want is a modeless dialog.
In the code you posted, change the
FileExplor
class to aQDialog
:Then add a signal handler to the main
FileExplorer
class:And finally connect the button to the handler:
我这台机器上没有安装 PyQt4,所以我无法对此进行测试。但这是您的问题:
您没有引用下面创建的小部件对象,而是引用类对象 FileExplor。
您可以尝试将
FileExplor
作为FileExplorer
的参数吗?另外,尝试将
FileExplor
命名为其他名称,例如DependentFileExplorer
(了解命名约定 此处)并执行以下操作:现在 FileExplorer 将 DependentFileExplorer 作为参数。
您必须在 FileExplorer 之前创建 DependentFileExplorer。
I don't have PyQt4 installed on this machine so i can't test this. But here is your problem:
You are not referencing the widget object created below, you are referencing the class object FileExplor.
Can you try making
FileExplor
as a argument ofFileExplorer
?Also, try naming
FileExplor
something else, likeDependentFileExplorer
(learn about naming conventions here) and do this:Now FileExplorer takes DependentFileExplorer as an argument.
You must create the DependentFileExplorer before FileExplorer.