Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Aziikus
2 / 2 / 0
Регистрация: 02.06.2013
Сообщений: 40

Python+PyQt5 не показывает QFileDialog

17.04.2016, 10:17. Показов 2086. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте. Собственно начал грызть PyQt5 и возникла одна проблема.
Есть 3 файла:
main.py - основная логика программы
fileDialog.py - хранение внешних функций(пока только одна)
prog.py - Нарисованная в QtCreator форма, которая при помощи Pyuic сделана в файл .py

Проблема в том что, я не знаю как заставить появляться окну выбора файла. Я догадываюсь что его просто надо объявить или инициировать, но покапавшись в гугле так и не понял что нужно сделать.
Суть программы, открыть текстовый файл и разделить его на смысловые части, грубо говоря это будет семантический анализ, далее обработанные данные закинуть в таблицу. В качестве таблицы выбрал tableView.

Файл main.py:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from fileDialog import MainWindowSlots
 
 
class MainWindow(MainWindowSlots):
    def __init__(self, form):
        self.setupUi(form)
        self.connect_slots()
 
    def connect_slots(self):
        self.pushButton.clicked.connect(self.showDialog)
        return None
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = MainWindow(window)
    window.show()
    sys.exit(app.exec_())
Файл fileDialog:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from PyQt5.QtWidgets import QFileDialog, QDialog
from PyQt5.QtCore import QStringListModel
from prog import Ui_MainWindow
 
 
class MainWindowSlots(QFileDialog, Ui_MainWindow):
 
    def __init__(self):
        QDialog.__init__(self)
        self.setupUi(self)
 
    def showDialog(self):
        fname, _ = QFileDialog.getOpenFileName(self, 'Open File', '/home/kda/')
        f = open(fname, 'r')
        with f:
            data = str(f.read())
            model = QStringListModel()
            model.setStringList(data.split(";"))
            self.tableView.setModel(model)
Файл prog.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
# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.4.2
#
# WARNING! All changes made in this file will be lost!
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(586, 354)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(310, 120, 104, 29))
        self.pushButton.setObjectName("pushButton")
        self.tableView = QtWidgets.QTableView(self.centralWidget)
        self.tableView.setGeometry(QtCore.QRect(0, 10, 261, 271))
        self.tableView.setObjectName("tableView")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 586, 27))
        self.menuBar.setObjectName("menuBar")
        MainWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(MainWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
PS: Сильно не пинайте, просто я не смог найти нормальной литературы по PyQt5, где описывается как строить GUI...

Добавлено через 9 часов 44 минуты
Решил проблему сам методом тыка.
Файл main.py нужно изменить следующим образом:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from fileDialog import MainWindowSlots
 
 
class MainWindow(QMainWindow, MainWindowSlots):
    def __init__(self, form):
        QMainWindow.__init__(self)
        self.setupUi(form)
        self.connect_slots()
 
    def connect_slots(self):
        self.pushButton.clicked.connect(self.showDialog)
        return None
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = MainWindow(window)
    window.show()
    sys.exit(app.exec_())
Файл fileDialog.py и prog.py остаются без изменения.
Я натыкал отталкиваясь от мата компилятора, но вот не понимаю как это работает.
Как я понимаю, здесь мы определили, что в нарисованная в креаторе форма является основной+ добавили классы для того чтобы у диалога открытия файлов была возможность открыть файлы?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2016, 10:17
Ответы с готовыми решениями:

PyQt5 не показывает ошибки
PyQt5 при возникновении ошибки просто завершает работу программы, а хотелось бы посмотреть что ему не понравилось... Как включить...

Не показывает картинку в Pyqt5
Здравствуйте, такая проблема: пишу код, работаю с Pyqt5, не высвечивается картинка. Подумал ошибка в коде, но у друга все работает, подумал...

Не могу установить библиотеку pyqt5-tools python не получается через терминал и настройки и python itnerpritathor
Прошу помочь

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.04.2016, 10:17
Помогаю со студенческими работами здесь

Порт pyqt5 (python 3.5) программы на android - Python
Подскажите пожалуйста возможно ли программу написанную на python методами pyqt5 переделать под android этими методами? Если так, то как? ...

PyQt5 python 3.4.1
Приветствую всех и прошу помощи! нужна программа в которой 4 строчки куда заносятся переменные, после нажимается кнопка эти переменные...

Python 3.6 не видит PyQt5
Здравствуйте! Никак не могу нормально подружить питона с PyQt5. Не проходит элементарный импорт: from PyQt5.QtWidgets import...

Paint в PYqt5 PYTHON
Помогите пожалуйста! Делаю рисовалку, уже сделал кисти, но не могу сделать инструмент фигуры, падает когда хочу нарисовать прямоугольник....

Python и Pyqt5: потоки
Добрый день, программисты. Я начинающий программист. У меня есть такая задача: Есть окно PyQt(внутри него QWebView - отображаеться html...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru