Как сделать grid модель для QLineEdit (PyQt5)
С помощью абсолютного позиционирования я расставил строчки QLineEdit, но когда я пытался расставить их с помощью grid, у меня не получалось, можете помочь с этим
Ещё вопрос, можно ли сделать шрифт в приложении отдельным файлом ttf? У меня меняется шрифт только, если указать уже установленный.
Для примера: QToolTip.setFont(QFont("Arial", 10)), будет работать,
а если указать как-то так - QToolTip.setFont(QFont("fonts/font.ttf", 10)), то нет.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QPushButton, QLabel, QLineEdit, QToolTip, QHBoxLayout, QVBoxLayout,
QMessageBox)
from PyQt5.QtGui import (QFont, QIcon)
from PyQt5.QtCore import QCoreApplication
class App(QWidget):
def __init__(self):
super().__init__()
self.window()
def window(self):
self.setWindowTitle("Body mass index")
self.setWindowIcon(QIcon("img/ico.png"))
QToolTip.setFont(QFont("Arial", 10))
self.okBtn = QPushButton("ok")
self.okBtn.setToolTip("calculate")
self.exitBtn = QPushButton("exit")
self.exitBtn.setToolTip("close the program")
self.exitBtn.clicked.connect(QCoreApplication.instance().quit)
# Block model for buttons
self.Hbox = QHBoxLayout()
self.Hbox.addStretch()
self.Hbox.addWidget(self.okBtn)
self.Hbox.addWidget(self.exitBtn)
self.Vbox = QVBoxLayout()
self.Vbox.addStretch()
self.Vbox.addLayout(self.Hbox)
self.setLayout(self.Vbox)
self.m = QLineEdit(self) # mass
self.h = QLineEdit(self) # height
self.m.resize(190, 20)
self.m.move(10, 20)
self.h.resize(190, 20)
self.h.move(10, 60)
def closeEvent(self, event):
reply = QMessageBox.question(self, "Exit", "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == "__main__":
root = QApplication(sys.argv)
start = App()
start.setFixedSize(300, 150) # Window size
start.show()
sys.exit(root.exec_())
Ответы (2 шт):
Шрифт можно загрузить вот так:
id = QFontDatabase::addApplicationFont(const QString &fileName)
if id != -1:
font_families = QFontDatabase::applicationFontFamilies(id);
print( font_families );
Насчет грида (если имеется в виду QGridLayout), то вот так:
layout = QGridLayout()
# Первая строка
layout.addWidget(widget1, 0, 0) # первая колонка
layout.addWidget(widget2, 0, 1) # вторая колонка
#Вторая строка
layout.addWidget(widget3, 1, 0)
layout.addWidget(widget4, 1, 1)
# Устанавливаем лейаут в родительский виджет
parentWidget.setLayout(layout)
я не заметил ваших попыток использовать QGridLayout,
но у вас есть QVBoxLayou и этого достаточно.
я отметил для вас как надо вставлять шрифты, находящиеся в файлах .ttf
import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QPushButton, QLabel,
QLineEdit, QToolTip, QHBoxLayout, QVBoxLayout,
QMessageBox)
from PyQt5.QtGui import (QFont, QIcon, QFontDatabase)
from PyQt5.QtCore import QCoreApplication
class App(QWidget):
def __init__(self):
super().__init__()
self.window()
def window(self):
self.setWindowTitle("Body mass index")
self.setWindowIcon(QIcon("img/ico.png"))
# QToolTip.setFont(QFont("Arial", 10))
QToolTip.setFont(QFont("RobotoBoldCondensedItalic", 16)) # +++
self.okBtn = QPushButton("ok")
self.okBtn.setToolTip("calculate")
self.exitBtn = QPushButton("exit")
self.exitBtn.setToolTip("close the program")
self.exitBtn.clicked.connect(QCoreApplication.instance().quit)
self.Hbox = QHBoxLayout()
self.Hbox.addStretch()
self.Hbox.addWidget(self.okBtn)
self.Hbox.addWidget(self.exitBtn)
self.m = QLineEdit(self) # +++
self.h = QLineEdit(self) # +++
self.Vbox = QVBoxLayout()
self.Vbox.addWidget(self.m) # +++
self.Vbox.addWidget(self.h) # +++
# так
self.Vbox.addStretch() # ? попробуйте так
self.Vbox.addLayout(self.Hbox)
# или так self.Vbox.addStretch() # ? или попробуйте так
self.setLayout(self.Vbox)
#- self.m = QLineEdit(self) # mass
#- self.h = QLineEdit(self) # height
#- self.m.resize(190, 20)
#- self.m.move(10, 20)
#- self.h.resize(190, 20)
#- self.h.move(10, 60)
def closeEvent(self, event):
reply = QMessageBox.question(
self,
"Exit",
"Are you sure to quit?",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No
)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == "__main__":
root = QApplication(sys.argv)
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
QFontDatabase.addApplicationFont( # +++
"D:\_Qt\Python-Examples\_PyQt5\Font\Fonts\Roboto\Roboto-BoldCondensedItalic.ttf")
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
start = App()
# start.setFixedSize(300, 150) # установие если вам надо
start.show()
sys.exit(root.exec_())
