私はユーザーが手動でファイルを選択するか、ファイルをMainWindow
にドラッグアンドドロップすることができるプログラムを作ろうとしています。Pyside/PyQt:クラス間で情報を送信する方法
ファイルブラウザが動作し、メインウィンドウには、ドロップを受け入れますが、私は方法を見つけ出すことはできません。
- が
Ui_MainWindow
- 変更
pushButton
選択したファイルのテキストに「クラスmyMainWindow
から出て、クラスにfilePath
をゲット'ファイルが削除されたとき。
私はemit()/ signal()を使用して2つのクラス間で情報を送信する必要があるようですが、それらを接続する方法を理解できません。
全コード:
from PySide import QtCore, QtGui
class myMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent=parent)
self.filePath = ''
def dragEnterEvent(self, event):
if event.mimeData().hasUrls:
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
else:
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(QtCore.Qt.CopyAction)
event.accept()
for url in event.mimeData().urls():
self.filePath = (str(url.toLocalFile()))
# What else do I do here?
else:
event.ignore()
class Ui_MainWindow(object):
def selectFile(self):
self.filePath = QtGui.QFileDialog.getOpenFileName()
self.pushButton.setText('File Selected')
print(self.filePath)
def myChanges(self):
self.pushButton.clicked.connect(self.selectFile)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
MainWindow.setAcceptDrops(True)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(330, 180, 75, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.myChanges()
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Browse", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = myMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
最初の点をよりよく説明できます。 – eyllanesc
このコードを実行すると、「参照」というラベルの付いた巨大なウィンドウがポップアップします。そのボタンを押すと、QFileDIalogウィンドウがポップアップし、ファイルを選択すると、ボタンのテキストが「選択されたファイル」に変わります。だから、起こってほしいことの少なくとも1つが起こります。 – mauve
私は最初の点について質問します – eyllanesc