Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
PentagonHacker
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
1
PyQt5

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

11.02.2020, 04:23. Просмотров 2382. Ответов 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)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2020, 04:23
Ответы с готовыми решениями:

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

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

Как работать с элементами стека
Есть пару вопросов: Есть у нас Стек,как работать с элементами стека? Как ,к примеру,первый...

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

Как сравнивать элементы одного масива с элементами другого?
Здраствуйте, хеелппп. Даны два массива : А и B. Необходимо создать третий массив, в котором нужно...

7
tooru
1104 / 549 / 309
Регистрация: 07.01.2019
Сообщений: 1,596
11.02.2020, 08:24 2
Цитата Сообщение от 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
PentagonHacker
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
11.02.2020, 15:31  [ТС] 3
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
tooru
1104 / 549 / 309
Регистрация: 07.01.2019
Сообщений: 1,596
14.02.2020, 21:28 4
Цитата Сообщение от PentagonHacker Посмотреть сообщение
Однако мне также нужно, чтобы я мог в файле с функциями (vk_api_methods.py), после получения данных от api, сразу добавлять их в listWidget.
Тут нужно делать по другому, создавать класс формы
1
PentagonHacker
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
14.02.2020, 21:40  [ТС] 5
Цитата Сообщение от tooru Посмотреть сообщение
Тут нужно делать по другому, создавать класс формы
Если вам не сложно, можете пожалуйста показать примерную реализацию? Я просто не совсем понимаю, о чём речь, а тем более как реализовать. Спасибо!
0
tooru
1104 / 549 / 309
Регистрация: 07.01.2019
Сообщений: 1,596
15.02.2020, 02:40 6
Лучший ответ Сообщение было отмечено 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
PentagonHacker
0 / 0 / 0
Регистрация: 19.10.2015
Сообщений: 4
15.02.2020, 03:40  [ТС] 7
Цитата Сообщение от tooru Посмотреть сообщение
Тут нужно делать по другому, создавать класс формы
Понял, сделано при помощи return, а также понял, что всё же по-любому большую часть работы элементов интерфейса необходимо прописывать именно в файле инициализации самого интерфейса. Просто жесть как неудобно, что нельзя работать с элементами интерфейса из другого файла напрямую, т.е. не выполнять заполнение QlisWidget в __init__.py файле, а напрямую в любом желаемом.
Чую, надо будет читать тонну документации по Qt, чтобы разобраться в этом вопросе.
Спасибо огромное за то, что откликнулись и помогли!

Добавлено через 5 минут
Всё же ещё вопрос, что это за строчка?
Python
1
self.listWidget.addItem('==================================================')
0
tooru
1104 / 549 / 309
Регистрация: 07.01.2019
Сообщений: 1,596
15.02.2020, 07:14 8
Цитата Сообщение от PentagonHacker Посмотреть сообщение
self.listWidget.addItem('==================================================')
Просто добавляем строку для визуального отделения новостей друг от друга
1
15.02.2020, 07:14
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2020, 07:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как работать с элементами вектора в цикле
Здравствуйте объясните пожалуйста. как работать с элементами вектора в цикле. в стандартном...

Как работать с элементами (булическими) в массиве?
Как зажигать индикаторы, контролировать или давать условия...

Python 3.2: как работать с документацией?
print(, *, sep=' ', end='\n', file=sys.stdout) Вот ссыль на мануал:...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.