J'essaie de créer un programme qui permet à l'utilisateur de sélectionner manuellement un fichier ou simplement de faire glisser un fichier dans le MainWindow
.Pyside/PyQt: Comment envoyer des informations entre les classes
Le navigateur de fichiers fonctionne et MainWindow accepte gouttes, mais je ne peux pas comprendre comment:
- Get
filePath
hors de la classemyMainWindow
et en classeUi_MainWindow
- changement
pushButton
texte d « » Fichier sélectionné 'quand un fichier a été abandonné.
Il semble que j'ai besoin d'utiliser emit()/signal() pour envoyer des informations entre les deux classes mais je n'arrive pas à comprendre comment les connecter.
code complet:
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_())
Vous pourriez mieux expliquer le premier point. – eyllanesc
Lorsque j'exécute ce code, il affiche une énorme fenêtre avec un bouton intitulé "Parcourir". Quand j'appuie sur ce bouton, une fenêtre QFileDIalog apparaît et une fois que je sélectionne un fichier, le texte sur le bouton devient "Fichier sélectionné". Donc, au moins une des choses que vous voulez arriver arrive. – mauve
Je vous interroge sur le premier point – eyllanesc