2011-10-20 66 views
1

我是PyQt中的新成員並使用PyQt4。有兩個獨立的小部件。其中第一個showFullScreen()和第二個show()。我想通過hide()隱藏第二個後點擊按鈕顯示它。嘗試了一些東西並搜索了一下 - 什麼都沒有。 全碼:PyQt通過單擊另一個按鈕來顯示一個窗口小部件

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_()) 

邏輯我想要做的到底是什麼:

  • 第一部件 - 主塊(全屏)
  • 其他部件 - 可以通過單擊第一
  • 按鈕秀

回答

2

這聽起來像你想要的是一個無模式的對話框。

在您發佈的代碼中,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) 
0

我沒有在這臺機器上安裝PyQt4,所以我無法測試這個。但這裏是你的問題:

showButton.clicked.connect(FileExplor.show) 

你不是引用下面創建的小部件對象,而是引用類對象FileExplor。

fileExplorer = FileExplorer() 
    fileExplorer.showFullScreen() 

    fileExplor = FileExplor() 
    fileExplor.show() 

你可以嘗試做FileExplorFileExplorer一個說法? 此外,嘗試命名FileExplor別的東西,像DependentFileExplorer(瞭解命名約定here),並做到這一點:

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。

相關問題