Remarque: J'ai déjà lu this et je ne l'ai pas compris malheureusement. J'ai un paramètres du répertoire un peu comme ceci:Accès aux éléments GUI depuis la classe GUI externe dans PyQt
Main_Folder
|_ Base_Gui_File.py
|_ Child_directory (a directory inside Main_Folder)
|_ __init__.py
|_ some_other.py
J'ai tout le code de l'interface graphique dans le fichier Base_Gui_File.py
, qui a été généré à partir designer
(PyQt4). Il y a un champ de saisie de texte QLineEdit
, un bouton poussoir QPushButton
et une zone de texte QTextBrowser
.
Par défaut, QTextBrowser
est masqué. Mais, ce que je voulais faire était que, quand quelqu'un tape quelque chose dans le QLineEdit
et clique sur le QPushButton
, il va envoyer la chaîne de QLineEdit
à une méthode dans some_other.py
fichier dans le Child_Directory
. Et après avoir fait quelque chose avec cette chaîne, la méthode dans le fichier some_other.py
sera show
le QTextBrowser
dans le Base_Gui_File.py
et également imprimer quelque chose dans le QTextBrowser
.
Jusqu'ici j'ai été en mesure d'envoyer la chaîne de Base_GUI_File.py
au fichier some_other.py
en prenant l'entrée du QLineEdit
. Voici le code pour les deux fichiers:
some_other.py:
import sys
sys.path.append("..")
from Base_Gui_File import Ui_MainWindow
class childone(object):
"""docstring for childone"""
def __init__(self):
super(childone, self).__init__()
def somemethod(self, url):
pass
print 'Hey!'
final_string = str(url) + "Just tying this!"
print final_string
Base_Gui_file.py:
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(800, 544)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.MyPushButton = QtGui.QPushButton(self.centralwidget)
self.MyPushButton.setGeometry(QtCore.QRect(680, 40, 75, 23))
self.MyPushButton.setObjectName(_fromUtf8("MyPushButton"))
self.MyLabel = QtGui.QLabel(self.centralwidget)
self.MyLabel.setGeometry(QtCore.QRect(30, 30, 46, 13))
self.MyLabel.setObjectName(_fromUtf8("MyLabel"))
self.MyTextArea = QtGui.QTextBrowser(self.centralwidget)
self.MyTextArea.setGeometry(QtCore.QRect(20, 110, 721, 361))
self.MyTextArea.setObjectName(_fromUtf8("MyTextArea"))
self.MyTextField = QtGui.QLineEdit(self.centralwidget)
self.MyTextField.setGeometry(QtCore.QRect(100, 30, 571, 41))
self.MyTextField.setObjectName(_fromUtf8("MyTextField"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName(_fromUtf8("menubar"))
self.menuFIle = QtGui.QMenu(self.menubar)
self.menuFIle.setObjectName(_fromUtf8("menuFIle"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.menubar.addAction(self.menuFIle.menuAction())
self.MyPushButton.clicked.connect(self.download_click)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.MyPushButton.setText(_translate("MainWindow", "PushButton", None))
self.MyLabel.setText(_translate("MainWindow", "TextLabel", None))
self.menuFIle.setTitle(_translate("MainWindow", "FIle", None))
def download_click(self):
self.MyTextArea.textCursor().insertHtml('Im HERE!') # This is working as it should
url = str(self.MyTextField.text())
from Child_directory.some_other import childone
childone().somemethod(url)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Comment puis-je faire? J'ai commencé la programmation en GUI et OO (Python) il y a 2 jours, donc je suis plutôt novice en la matière. Donc, même si c'est juste un guide dans la bonne direction, ce serait génial!
OK, super! C'est logique. Merci beaucoup pour tous ces conseils, je me retrouve en train de faire une structure de répertoire bizarre très souvent. Pourriez-vous préciser un peu ce que vous entendiez par "Donc, une fois que vous avez réarrangé votre programme, vous devriez générer de nouveau le module gui en utilisant pyuic"? Réorganiser l'interface graphique? – Xonshiz
Non - Je veux dire, une fois que vous avez fait les changements que j'ai suggérés, vous pouvez relancer pyuic sur votre fichier ui designer pour créer un nouveau module gui. C'est pourquoi vous ne devriez jamais éditer ce fichier - chaque fois que vous faites des changements dans qt designer, vous devez relancer pyuic, ce qui détruira toutes les modifications que vous avez faites précédemment. – ekhumoro
Hey, désolé pour le retard. J'étais occupé avec les examens. J'ai fait comme vous l'avez mentionné et maintenant [j'ai rencontré un problème étrange] (http://stackoverflow.com/questions/41328165/qtextbrowser-not-updating-in-pyqt-python). Merci pour votre aide ici! – Xonshiz