0
這裏是我的代碼:如何包裝一個QFileDialog和QPushButton對象中的
from PyQt5.QtCore import (
QDir
)
from PyQt5.QtWidgets import(
QApplication,QDialog,
QVBoxLayout,QGridLayout,QPushButton,QFileDialog
)
class DicAsk(object):
def __init__(self):
super(DicAsk, self).__init__()
self.button = QPushButton("ButtonB")
self.button.clicked.connect(self.browse)
# self.button.clicked.connect(lambda:QFileDialog.getExistingDirectory(None, "Find Files",
# QDir.currentPath()))
def browse(self):
directory = QFileDialog.getExistingDirectory(None, "Find Files",
QDir.currentPath())
class Window(QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
buttonA = QPushButton("ButtonA")
buttonA.clicked.connect(self.browse)
dicAsk = DicAsk()
mainLayout = QVBoxLayout()
mainLayout.addWidget(buttonA)
mainLayout.addWidget(dicAsk.button)
self.setLayout(mainLayout)
def browse(self):
directory = QFileDialog.getExistingDirectory(None, "Find Files",
QDir.currentPath())
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
有窗口兩個按鈕:「按鈕a」和「按鈕B」。 按鈕A工作正常,它可以成功打開QFileDialog
。
按鈕B在類中定義,應該像按鈕A一樣工作,但不會打開QFileDialog
。如果將browse
方法更改爲lambda函數,它將起作用。爲什麼browse
方法不起作用?
這是不正確的 - *任何* python callable都可以用作插槽。 OPs例子唯一的問題是它們沒有保留對'dicAsk'的引用(當它被添加到佈局時,按鈕將被重新設置)。但是你可能是正確的,子類化'QPushButton'更合理。 – ekhumoro
確實我的不好。我以爲我只通過使用'QObject'修復了這個例子,但我實際上也添加了'self.dicAsk'。我會編輯我的答案,謝謝。 – Mel
謝謝,這是一個完美的答案。 – user1021531