Как сделать программу с интерфейсом в блокноте

Содержание
Читайте также:
Подключение базы данных к программе

изначально значение поля TEXTAREA выдают строку в которой перенос обозначается лишь одним байтом LF(перевод строки), в операционной системе Windows в штатном блокноте это не считается за перенос и весь текст выводится в одну строчку, чтобы решить ту проблему необходимо последовательно перебрать всю строку и добавить CR(возврат каретки) перед LF.

(Просмотров всего: 2 139, просмотров сегодня: 1)

Блокнот с графическим интерфейсом на языке Go

Несмотря на то, что язык Go существует уже не один год, информация о том, как создавать приложения с графическим интерфейсом на этом языке, практически отсутствует. Возможно это вызвано тем, что среди официальных библиотек до сих пор нет библиотеки для работы с GUI.

Однако это не значит, что мы не можем создать приложение с пользовательским интерфейсом: существуют библиотеки, предоставляющие такую возможность. Приведу их список. Но есть еще несколько библиотек, не указанных в этом списке. Среди них — Walk, название которого расшифровывается как «Windows Application Library Kit». С его помощью я попробую создать небольшое приложение с пользовательским интерфейсом.

ОКОННОЕ ПРИЛОЖЕНИЕ С НУЛЯ — ПОЛНЫЙ БАЗОВЫЙ КУРС C++ WINAPI


Постановка задачи

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

Установка библиотеки Walk

Walk работает только с Go версии 1.1.x и выше. На первом этапе нужно загрузить и установить библиотеку с GitHub. Запускаем CMD и выполняем команду :

go get github.com/lxn/walk

Если Go ругается и выдает что-то типа:
go: missing Git command .

Нужно посетить git-scm.com/downloads и установить Git. Если после установки его ошибка не исчезла, нужно убедиться, что в %PATH% прописан путь до Git.

Создание пустой формы


Создадим исходный файл gopad.go с таким содержимым:

package main import ( . «github.com/lxn/walk/declarative» ) func main() < MainWindow< Title: «GoPad», // Ставим заголовок формы MinSize: Size, // И ее минимальные размеры >.Run() >

Теперь скомпилируем наш исходник. Создадим bat-скрипт build.bat с таким содержимым:
go build -ldflags=»-H windowsgui» pause

Мы могли бы не прописывать ключ ldflags , но тогда бы форма запускалась вместе с консолью на заднем плане. Запустим наш скрипт и убедимся, что все скомпилировалось корректно. Но запускать полученный exe-файл пока что рано. Нужно создать еще один файл — манифест. Создадим файл gopad.exe.manifest (вместо gopad.exe должно быть название полученного бинарника) с таким содержимым:

Манифест обязательно должен присутствовать. Без него бинарник не запустится!

Как в Python писать программы с интерфейсом?


Когда все сделано, пора запустить нашу пустую форму, чтобы убедиться, что все работает. У меня полученная программа выглядит так:

Добавляем необходимые кнопки и поле ввода


Для начала добавим поле ввода. Добавим в import еще одну библиотеку:

import ( «github.com/lxn/walk» . «github.com/lxn/walk/declarative» )

Потом создадим поле ввода, переменную-указатель и привяжем его к полю:
func main() < var edit *walk.TextEdit MainWindow< Title: «GoPad», MinSize: Size, Layout: VBox<>, Children: []Widget< TextEdit, >, >.Run() >

Запустим и убедимся, что появилось поле ввода, которое отображается на всю форму.
Таким же образом пропишем в MainWindow четыре кнопки: «Copy», «Paste», «Load», «Save»:

MainWindow< Title: «GoPad», MinSize: Size, Layout: VBox<>, Children: []Widget< TextEdit, HSplitter< MinSize: Size, Children: []Widget< PushButton< Text: «Copy», >, PushButton< Text: «Paste», >, PushButton< Text: «Load», >, PushButton< Text: «Save», >, >, >, >, >.Run()

В результате получаем вот такую форму:

Когда все элементы расположились на ней, пора добавить немного функционала.

Работа с буфером

Чтобы добавить обработчик нажатия на кнопку, достаточно прописать необходимую функцию, которая будет запускаться при нажатии кнопки, в свойствах самой же кнопки:

PushButton< Text: «Save», OnClicked: func() < // . >, >,

Блокнот на PyQT5

Привожу пример реализации блокнота на языке программирования python с использованием библиотеки PyQT5. Код предложен Юрием.

import sys from PyQt5 import uic from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QFileDialog, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.textEdit = QTextEdit() self.setCentralWidget(self.textEdit) self.statusBar() newFile = QAction(QIcon(‘new.png’), ‘New File’, self) newFile.triggered.connect(self.newFile) openFile = QAction(QIcon(‘open.png’), ‘Open’, self) openFile.triggered.connect(self.openFile) saveFile = QAction(QIcon(‘save.png’), ‘Save’, self) saveFile.triggered.connect(self.saveFile) closeFile = QAction(QIcon(‘exit.png’), ‘Exit’, self) closeFile.triggered.connect(self.closeFile) menubar = self.menuBar() fileMenu = menubar.addMenu(‘») def saveFile(self): fname = QFileDialog.getSaveFileName(self, ‘Save’, ‘/Newfile’)[0] text = self.textEdit.toPlainText() with open(fname + ‘.txt’, ‘w’) as f: f.write(text) def openFile(self): fname = QFileDialog.getOpenFileName(self, ‘Open’, ‘/home’)[0] f = open(fname, ‘r’) with f: data = f.read() self.textEdit.setText(data) def closeFile(self): QMainWindow.close() if __name__ == ‘__main__’: app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())

Связанные статьи

Поделиться:

Рекомендую прочесть статьи, связанные с данной:

Источник: aermolenko.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru