С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
PyQt5

Как работать с элементами Qt интерфейса из другого Python файла?

11.02.2020, 04:23. Показов 5639. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, только изучаю работу и интерфейсом. Прям совсем совсем новичок в этом деле. Суть в том, что у меня есть 3 файла: 1)файл с кодом самого интерфейса(gui_main_interface.py), 2) файл с кодом инициализации интерфейса(__init__.py), 3) файл с определёнными функциями(vk_api_methods.py).
Мне необходимо в файле с функциями (vk_api_methods.py) использовать элементы Qt интерфейса, к примеру получить данные из QlineEdit1 и QlineEdit2. Как можно это сделать? Заранее премного благодарен!

gui_main_interface.py:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_VK_API(object):
    def setupUi(self, VK_API):
        VK_API.setObjectName("VK_API")
        VK_API.resize(400, 446)
        self.lineEdit = QtWidgets.QLineEdit(VK_API)
        self.lineEdit.setGeometry(QtCore.QRect(10, 50, 381, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(VK_API)
        self.label.setGeometry(QtCore.QRect(10, 20, 381, 20))
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(VK_API)
        self.label_2.setGeometry(QtCore.QRect(10, 140, 381, 20))
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(VK_API)
        self.pushButton.setGeometry(QtCore.QRect(10, 390, 381, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(VK_API)
        self.pushButton_2.setGeometry(QtCore.QRect(10, 420, 381, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.listWidget = QtWidgets.QListWidget(VK_API)
        self.listWidget.setGeometry(QtCore.QRect(15, 171, 371, 211))
        self.listWidget.setObjectName("listWidget")
        self.lineEdit_2 = QtWidgets.QLineEdit(VK_API)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 110, 381, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(VK_API)
        self.label_3.setGeometry(QtCore.QRect(10, 80, 381, 20))
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
 
        self.retranslateUi(VK_API)
        QtCore.QMetaObject.connectSlotsByName(VK_API)
 
    def retranslateUi(self, VK_API):
        _translate = QtCore.QCoreApplication.translate
        VK_API.setWindowTitle(_translate("VK_API", "VK_API"))
        self.label.setText(_translate("VK_API", "Ключевое слово"))
        self.label_2.setText(_translate("VK_API", "Записи"))
        self.pushButton.setText(_translate("VK_API", "Собрать данные"))
        self.pushButton_2.setText(_translate("VK_API", "Визуализировать"))
        self.label_3.setText(_translate("VK_API", "Количество постов"))
__init__.py:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if __name__ == "__main__":
    import sys
    from gui_main_interface import Ui_VK_API
    from PyQt5 import QtCore, QtGui, QtWidgets
    from vk_api_methods import vk_methods
    import gephi_streaming
    from my_data import MyVkData
    
    app = QtWidgets.QApplication(sys.argv)
    VK_API = QtWidgets.QDialog()
    ui = Ui_VK_API()
    ui.setupUi(VK_API)
    ui.pushButton.clicked.connect(vk_methods.newsfeed_search)
 
    VK_API.show()
    sys.exit(app.exec_())
vk_api_methods.py:
Python
1
2
3
4
5
6
7
8
9
10
import vk
from my_data import MyVkData
from gui_main_interface import Ui_VK_API
session = vk.AuthSession(app_id=MyVkData.APP_ID,user_login=MyVkData.LOGIN,user_password=MyVkData.GET_PASSWORD())
vkapi = vk.API(session,v = '5.103')
 
class vk_methods:
    @staticmethod
    def newsfeed_search():
        topics=vkapi.newsfeed.search(q="Здесь хочу получить данные из QlineEdit1",count="Здесь хочу получить данные из QlineEdit2",extended=1)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2020, 04:23
Ответы с готовыми решениями:

Взаимодействие с элементами интерфейса другого приложения
Добрый день! Хочу научить свою прогу взаимодействовать с элементами интерфейса другой программы. В идеале - определять такие элементы,...

Как работать с окном программы с другого файла?
Здраствуйте, возникла небольшая проблема. Как мне изменить к примеру название и задний фон программы с другого файла? Я перепробовал кучу...

Как использовать функцию из другого файла Python?
(Код будет ниже) У меня есть radiobutton, команда которая должна в ней исполниться находится в другом файле, как мне использовать...

7
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
11.02.2020, 08:24
Цитата Сообщение от PentagonHacker Посмотреть сообщение
Как можно это сделать?
Передать строки в функцию
Python
1
2
def newsfeed_search(txt1, txt2):
        topics=vkapi.newsfeed.search(q=txt1,count=txt2,extended=1)
Python
1
ui.pushButton.clicked.connect(lambda: vk_methods.newsfeed_search(ui.lineEdit, ui.lineEdit_2))
1
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
11.02.2020, 15:31  [ТС]
tooru
Передать строки в функцию
Отлично, спасибо. Это работает! Однако мне также нужно, чтобы я мог в файле с функциями (vk_api_methods.py), после получения данных от api, сразу добавлять их в listWidget.
Python
1
2
3
4
5
6
7
class vk_methods:
    @staticmethod
    def newsfeed_search():
        topics=vkapi.newsfeed.search(q=str(txt1),count=int(txt2),extended=1)
#И дальше что-то типа этого:
        for items in topics["items"]:
            ui.listWidget.addItem(items["text"])
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
14.02.2020, 21:28
Цитата Сообщение от PentagonHacker Посмотреть сообщение
Однако мне также нужно, чтобы я мог в файле с функциями (vk_api_methods.py), после получения данных от api, сразу добавлять их в listWidget.
Тут нужно делать по другому, создавать класс формы
1
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
14.02.2020, 21:40  [ТС]
Цитата Сообщение от tooru Посмотреть сообщение
Тут нужно делать по другому, создавать класс формы
Если вам не сложно, можете пожалуйста показать примерную реализацию? Я просто не совсем понимаю, о чём речь, а тем более как реализовать. Спасибо!
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
15.02.2020, 02:40
Лучший ответ Сообщение было отмечено PentagonHacker как решение

Решение

Цитата Сообщение от PentagonHacker Посмотреть сообщение
примерную реализацию
Python
1
2
3
4
5
6
7
8
9
import vk
from my_data import MyVkData
session = vk.AuthSession(app_id=MyVkData.APP_ID,user_login=MyVkData.LOGIN,user_password=MyVkData.GET_PASSWORD())
vkapi = vk.API(session,v = '5.103')
 
class vk_methods:
    @staticmethod
    def newsfeed_search(txt1, txt2):
        return vkapi.newsfeed.search(q=txt1,count=int(txt2),extended=1)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
from window import Ui_VK_API
from PyQt5 import QtCore, QtGui, QtWidgets
from vk_methods import vk_methods
 
class Window(QtWidgets.QMainWindow, Ui_VK_API):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.pushButton_click)
 
    def pushButton_click(self):
        top = vk_methods.newsfeed_search(self.lineEdit.text(), self.lineEdit_2.text())
        for x in top['items']:
            self.listWidget.addItem(x['text'])
            self.listWidget.addItem('==================================================')
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())
0
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
15.02.2020, 03:40  [ТС]
Цитата Сообщение от tooru Посмотреть сообщение
Тут нужно делать по другому, создавать класс формы
Понял, сделано при помощи return, а также понял, что всё же по-любому большую часть работы элементов интерфейса необходимо прописывать именно в файле инициализации самого интерфейса. Просто жесть как неудобно, что нельзя работать с элементами интерфейса из другого файла напрямую, т.е. не выполнять заполнение QlisWidget в __init__.py файле, а напрямую в любом желаемом.
Чую, надо будет читать тонну документации по Qt, чтобы разобраться в этом вопросе.
Спасибо огромное за то, что откликнулись и помогли!

Добавлено через 5 минут
Всё же ещё вопрос, что это за строчка?
Python
1
self.listWidget.addItem('==================================================')
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,301
15.02.2020, 07:14
Цитата Сообщение от PentagonHacker Посмотреть сообщение
self.listWidget.addItem('=============== ===================================')
Просто добавляем строку для визуального отделения новостей друг от друга
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2020, 07:14
Помогаю со студенческими работами здесь

Как по простому достать, изменить и сохранить переменную из другого файла? На Python
Меня интересует, можно ли без дополнительных модулей, библиотек, и даже без классов достать и перезаписать переменную в другом файле? Я уже...

Файл с уникальными элементами другого файла
Помогите пожалуйста! Создать новый файл, исключив из старого повторяющиеся элементы

Использование функции из другого файла python
Здравствуйте. У меня есть файл holod.agent: import sys from holod import * from PyQt5.QtWidgets import QTableWidgetItem ...

Как заполнить один массив элементами другого?
Нужно сравнить первый и второй массив, если есть элементы из первого, которые не повторяются во втором, заполнить ими третий массив и найти...

Как работать с элементами ListView
Здравствуйте! У меня есть ListView, источником для которого является некий пользовательский ObservableCollection. Я ведь правильно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru