Примечание: я уже прочитал сообщение this, и я этого не понимал, к сожалению. У меня есть настройки каталогов примерно так:Доступ к элементам GUI из-за пределов GUI класса в PyQt
Main_Folder
|_ Base_Gui_File.py
|_ Child_directory (a directory inside Main_Folder)
|_ __init__.py
|_ some_other.py
У меня есть весь код GUI в Base_Gui_File.py
файл, который был сгенерирован из designer
(PyQt4). Имеется поле ввода текста QLineEdit
, a кнопка QPushButton
и текстовая область QTextBrowser
.
По умолчанию QTextBrowser
скрыт. Но то, что я хотел сделать, было то, что, когда кто-то что-то набирает в QLineEdit
и нажимает QPushButton
, он отправит строку от QLineEdit
к методу в файле some_other.py
в Child_Directory
. И после выполнения чего-то с этой строкой, метод в файле some_other.py
будет show
QTextBrowser
в Base_Gui_File.py
, а также напечатать что-то в QTextBrowser
.
До сих пор мне удалось отправить строку с Base_GUI_File.py
в файл some_other.py
, взяв ввод с QLineEdit
. Вот код для обоих файлов:
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_())
Как я могу это сделать? Я начал программирование GUI и OO (Python) 2 дня назад, поэтому я в этом много нового. Так что, даже если это всего лишь руководство в правильном направлении, это было бы здорово!
Хорошо, отлично! Это имеет смысл. Большое спасибо за все эти советы, я нахожу, что очень часто создаю необычную структуру каталогов. Не могли бы вы немного рассказать о том, что вы имели в виду: «Итак, как только вы перестроили свою программу, вам нужно сгенерировать модуль gui с помощью pyuic»? Переустановите графический интерфейс? – Xonshiz
Нет. Я имею в виду, что после внесения изменений, которые я предложил, вы можете повторно запустить pyuic в своем дизайнерском файле ui, чтобы создать новый модуль gui. Вот почему вы никогда не должны редактировать этот файл - каждый раз, когда вы вносите изменения в конструктор qt, вам нужно повторно запустить pyuic, который уничтожит все сделанные вами изменения. – ekhumoro
Эй, извините за задержку. Я был занят экзаменами. Я сделал то, что вы упомянули, и теперь [я столкнулся с какой-то странной проблемой] (http://stackoverflow.com/questions/41328165/qtextbrowser-not-updating-in-pyqt-python). Спасибо за помощь здесь! – Xonshiz