Hinweis: Ich habe bereits this Post gelesen und ich habe es leider nicht verstanden. Ich habe ein Verzeichnis Einstellungen bekam etwas wie folgt aus:Zugreifen auf GUI-Elemente von außerhalb der GUI-Klasse in PyQt
Main_Folder
|_ Base_Gui_File.py
|_ Child_directory (a directory inside Main_Folder)
|_ __init__.py
|_ some_other.py
Ich habe alle GUI-Code in der Datei Base_Gui_File.py
bekam, die von designer
(PyQt4) generiert wurde. Es gibt ein Texteingabefeld QLineEdit
, eine Drucktaste QPushButton
und eine Textfläche QTextBrowser
.
Standardmäßig ist QTextBrowser
ausgeblendet. Aber was ich wollte, war, dass, wenn jemand etwas in die QLineEdit
und klickt auf die QPushButton
, es die Zeichenfolge von QLineEdit
zu einer Methode in some_other.py
Datei in der Child_Directory
sendet. Und nach etwas mit dieser Zeichenfolge, wird die Methode in der some_other.py
Datei show
die QTextBrowser
in der Base_Gui_File.py
und auch etwas in der QTextBrowser
drucken.
Bisher konnte ich die Zeichenfolge von Base_GUI_File.py
zu some_other.py
Datei senden, indem Sie die Eingabe von QLineEdit
. Hier ist der Code für die beiden Dateien:
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_())
Wie kann ich dies tun? Ich habe vor 2 Tagen angefangen, GUI und OO zu programmieren (Python), also bin ich ziemlich neu. Also, auch wenn es nur ein Wegweiser in die richtige Richtung ist, wäre das großartig!
Okay, großartig! Das macht Sinn. Vielen Dank für all diese Tipps, ich merke, dass ich sehr oft seltsame Verzeichnisstrukturen mache. Könnten Sie ein wenig ausdrücken, was Sie mit "So, nachdem Sie Ihr Programm neu angeordnet haben, sollten Sie das GUI-Modul mit Pyuic neu generieren"? Die GUI neu anordnen? – Xonshiz
Nein - ich meine, sobald Sie die von mir vorgeschlagenen Änderungen vorgenommen haben, können Sie pyuic erneut in Ihrer Designer-UI-Datei ausführen, um ein neues GUI-Modul zu erstellen. Aus diesem Grund sollten Sie diese Datei nie bearbeiten - jedes Mal, wenn Sie Änderungen am qt-Designer vornehmen, müssen Sie pyuic erneut ausführen, wodurch alle zuvor vorgenommenen Änderungen gelöscht werden. – ekhumoro
Hey, Entschuldigung für die Verzögerung. Ich war mit Prüfungen beschäftigt. Ich tat, wie Sie erwähnt haben und jetzt [ich stieß auf ein seltsames Problem] (http://stackoverflow.com/questions/41328165/qtextbrowser-not-updating-in-pyqt-python). Danke für Hilfe hier! – Xonshiz