Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/75: Рейтинг темы: голосов - 75, средняя оценка - 4.96
0 / 0 / 1
Регистрация: 01.03.2010
Сообщений: 96
1

PyQT текстовый редактор с вкладками

15.04.2018, 09:43. Показов 13553. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно создать текстовый редактор с возможностью открытия файлов в новых вкладках, как в Notepd++. Все простые примеры в сети содержат просто окно для редактирования. Как создать функционал с множеством вкладок?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2018, 09:43
Ответы с готовыми решениями:

Текстовый редактор от Avalon в приложении с двумя вкладками
Есть проект с двумя вкладками. В одной из вкладок используется текстовый редактор от Avalon. Его...

Почему данная программа на языке ассемблера создаёт текстовый файл, которые не может открыть текстовый редактор Mousepad
Пример взят из урока по ссылке: https://ravesli.com/assembler-upravlenie-fajlami/ Я его немного...

Текстовый редактор
Мне нужно создать текстовый редактор на C++ Builder с возможностью вставки рисунков и таблиц.В...

текстовый редактор!!!!
Текстовый редактор содержит главное меню с пунктами "Файл", "редактирование", "Печать",...

5
1292 / 909 / 479
Регистрация: 05.12.2013
Сообщений: 3,074
15.04.2018, 10:01 2
Вкладки делаются виджетом QTabWidget
0
0 / 0 / 1
Регистрация: 01.03.2010
Сообщений: 96
15.04.2018, 21:17  [ТС] 3
Это понятно, но неясно как динамически создавать там текст, и потом работать с текстом. Откуда программа знает какая вкладка сейчас активна и тд?

Пример не могу найти нигде
0
942 / 700 / 273
Регистрация: 10.12.2016
Сообщений: 1,733
15.04.2018, 21:29 4
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from PyQt5 import Qt
 
class Tab(Qt.QTabWidget):
    def __init__(self):
        Qt.QTabWidget.__init__(self)
        self.addTab(Qt.QTextEdit(),"edit1")
        self.addTab(Qt.QTextEdit(),"edit2")
        self.currentChanged.connect(self.on_tab)
    def on_tab(self):
        print(self.currentIndex())
 
if __name__=="__main__":
    app = Qt.QApplication([])
    t = Tab()
    t.show()
    app.exec_()
1
0 / 0 / 1
Регистрация: 01.03.2010
Сообщений: 96
15.04.2018, 22:55  [ТС] 5
Большое спасибо за код.

Я просто пытаюсь преобразовать простой пример блокнота на PyQt:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
import sys
from PyQt5.QtWidgets import (QMainWindow, QTextEdit, QAction, QFileDialog, QApplication, qApp, QTabWidget)
from PyQt5.QtGui import QIcon
 
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        
        self.resize(700, 500)
        
        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
       
       
       ##############################################
       #  Строим меню файла
       ##############################################
        #меню файла - пункт Exit
        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)
 
        #меню файла - пункт New
        newAction = QAction(QIcon('new.png'), '&New', self)
        newAction.setShortcut('Ctrl+N')
        newAction.setStatusTip('New file')
        newAction.triggered.connect(self.newFile)
        
        #меню файла - пункт Open
        openAction = QAction(QIcon('open.png'), '&Open', self)
        openAction.setShortcut('Ctrl+O')
        openAction.setStatusTip('Open File')
        openAction.triggered.connect(self.openFile)
        
        #меню файла - пункт Save As
        saveasAction = QAction(QIcon('save_as.png'), '&SaveAs', self)
        saveasAction.setShortcut('Ctrl+S')
        saveasAction.setStatusTip('Save file as...')
        saveasAction.triggered.connect(self.saveAs)
 
        self.statusBar()
 
        #добавляем элементы в меню
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(newAction)
        fileMenu.addAction(openAction)
        fileMenu.addAction(saveasAction)
        fileMenu.addAction(exitAction)
 
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Menubar')
        self.show()
        
    def newFile(self):
        self.textEdit.setText("")
    
        
        
    
    def openFile(self):
        #диалог открытия файла 
        fname = QFileDialog.getOpenFileName(self, 'Open file')[0]
        
        openedFile = open(fname, 'r')
        txt = openedFile.read()
        openedFile.close()
        self.textEdit.setText(txt)
    
    def saveAs(self):
        #диалог сохранения файла 
        fname = QFileDialog.getSaveFileName(self)[0]
        openedFile = open(fname, 'w')
        txt = self.textEdit.toPlainText()
        openedFile.write(txt)
        openedFile.close()
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    #QApplication.setStyle(QStyleFactory.create('Fusion'))
    myGUI = MainWindow()
 
    sys.exit(app.exec_())
и пытаюсь добавить функционал создания и октрытия файлов в вкладках. Если я правильно понимаю, в этом случае у меня окном верхнего уровня должен быть не QMainWindow, а QTabWidget? или можно как-то по другому реализовать?
0
942 / 700 / 273
Регистрация: 10.12.2016
Сообщений: 1,733
16.04.2018, 02:16 6
зачем? Tab - mainWindow.centralWidget
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from PyQt5 import Qt
 
class W(Qt.QMainWindow):
    def __init__(self):
        Qt.QMainWindow.__init__(self)
        self.tab = Qt.QTabWidget()
        self.setCentralWidget(self.tab)
        self.tab.addTab(Qt.QTextEdit(),"edit1")
        self.tab.addTab(Qt.QTextEdit(),"edit2")
        self.tab.currentChanged.connect(self.on_tab)
    def on_tab(self):
        txt = self.tab.currentWidget().toPlainText()
        print(txt)
 
 
if __name__=="__main__":
    app = Qt.QApplication([])
    t = W()
    t.show()
    app.exec_()
Добавлено через 3 часа 8 минут
простой редактор
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
46
47
from PyQt5 import Qt
 
class W(Qt.QMainWindow):
    def __init__(self):
        Qt.QMainWindow.__init__(self)
        self.tab = Qt.QTabWidget()
        self.setCentralWidget(self.tab)
 
        self.btnOpen = Qt.QPushButton('Open')
        self.btnOpen.clicked.connect(self.open)
        self.statusBar().addWidget(self.btnOpen)
        
        self.btnSave = Qt.QPushButton('Save')
        self.btnSave.clicked.connect(self.save)
        self.statusBar().addWidget(self.btnSave)
        
        self.btnClose = Qt.QPushButton('Close')
        self.btnClose.clicked.connect(self.close)
        self.statusBar().addWidget(self.btnClose)
    def open(self):
        fname = Qt.QFileDialog.getOpenFileName()[0]
        if not fname: return
        with open(fname) as f:
            txt = f.read()
        idx = self.tab.addTab(Qt.QTextEdit(),fname)
        self.tab.widget(idx).setPlainText(txt)
        self.tab.setCurrentIndex(idx)
    def save(self):
        fname = Qt.QFileDialog.getSaveFileName()[0]
        if not fname: return
        txt = self.tab.currentWidget().toPlainText()
        with open(fname,'w') as f:
            f.write(txt)
    def close(self):
        idx = self.tab.currentIndex()
        wgt = self.tab.widget(idx)
        self.tab.removeTab(idx)
        del wgt
        
 
 
if __name__=="__main__":
    app = Qt.QApplication([])
    t = W()
    t.resize(640,480)
    t.show()
    app.exec_()
1
16.04.2018, 02:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2018, 02:16
Помогаю со студенческими работами здесь

Текстовый редактор
здравствуйте,вопрос такой,используя видеоурокипо дельфи 7 скачанные с торрента,там 8 глав по 7...

Текстовый редактор
Как сделать: Новый Открить Сохранить Сохранить как... Помогите пожалуста !!На перед...

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

Текстовый редактор
Здравствуйте. У меня есть задание сделать что то похожее на текстовый редактор. В нем как...

Текстовый редактор
Разработка программы текстовый редактор В чем проблема не найду TeR.cpp #include <vcl.h>...

Текстовый редактор
Я хочу написать текстовый редактор с использованием web технологий. И задался таким вопросом....

Текстовый редактор
Подскажите какой удобней использовать? NotePad++ не очень удобен. Хочется чтоб была функция...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru