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

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

11.02.2020, 04:23. Показов 5696. Ответов 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,302
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,302
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,302
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,302
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru