Форум сайта python.su
Во-первых, нет никакой истерики.
Во-вторых, разделить тысяч мог бы быть как PyQt, так и в самом питоне или модуле для него. Есть же в PyQt маски…
Офлайн
KyrymПоясните свою мысль. Питон - язык программирования, зачем в нем какие-то бухгалтерские примочки? Каким образом в “модуле для него” возможно реализовать изменение синтаксических правил языка? Еще раз: как по-вашему связаны Qt и питон?
Во-вторых, разделить тысяч мог бы быть как PyQt, так и в самом питоне или модуле для него. Есть же в PyQt маски…
Офлайн
FishHookНе хочу продолжать этот пустой диалог.
Поясните свою мысль.
# Python 3. PyQt4 # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore # ЦВЕТА ПОЛЕЙ sss_vivod = ("background-color: #456173; color: #f2f2f0; font: 14pt 'Courier New'") # ГРАФИКА class Window(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.resize(200, 100) # шир / выс окна # БЛОК РАЗМЕТКИ self.vbox = QtGui.QVBoxLayout() # --- self.pole = QtGui.QLineEdit('') self.pole.setStyleSheet(sss_vivod) self.pole.textEdited.connect(self.razd) self.vbox.addWidget(self.pole) # --- self.setLayout(self.vbox) # ЛОГИКА def razd(self, x): x = str(x).replace(' ','') if x.find('.') == -1: x1 = x x2 = '' else: x1 = x[:x.find('.')] x2 = x[x.find('.'):len(x)] x1 = list(str(x1)) x1 = x1[::-1] i = 0 while i < len(x1): if i/4 == i//4: x1.insert(i,' ') i += 1 x = ''.join(x1[len(x1):0:-1])+x2 print(x) self.pole.setText(x) # КОНЕЦ if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Window() # создаёт экземпляр окна из класса window.show() # запускает окно sys.exit(app.exec_())
Отредактировано Kyrym (Сен. 5, 2017 15:29:20)
Офлайн
Kyrym вы опять рвете гланды черех жопу? для начала ваш razd(self, x): можно попроще написать:
x= 12345678 print('{0:,}'.format(x).replace(',', ' ')) >>> 12 345 678
import sys from PyQt4 import QtGui, QtCore # ЦВЕТА ПОЛЕЙ sss_vivod = ("background-color: #456173; color: #f2f2f0; font: 14pt 'Courier New'") # ГРАФИКА class LineEditWithTthousands(QtGui.QLineEdit): def init(self, *args, **kwargs): super().__init__(*args, **kwargs) self.textChanged.connect(self.setVisibleText) def paintEvent(self, event): painter = QtGui.QStylePainter(self) option = QtGui.QStyleOptionFrame() self.initStyleOption(option) painter.drawPrimitive(QtGui.QStyle.PE_PanelLineEdit, option) text = self.text() try: drawedText = int(text) except ValueError: drawedText = text else: drawedText = '{0:,}'.format(drawedText).replace(',', ' ') finally: painter.drawText(self.contentsRect(), QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter, drawedText) class Window(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.resize(200, 100) # шир / выс окна # БЛОК РАЗМЕТКИ self.vbox = QtGui.QVBoxLayout() # --- self.pole = LineEditWithTthousands('') self.pole.setStyleSheet(sss_vivod) self.pole.textEdited.connect(self.razd) self.vbox.addWidget(self.pole) # --- self.setLayout(self.vbox) # ЛОГИКА def razd(self, x): print(x) # КОНЕЦ if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Window() # создаёт экземпляр окна из класса window.show() # запускает окно sys.exit(app.exec_())
[code python][/code]
Офлайн
Нашёл вот такой код:
x = 1234567 y = '{0:,}'.format(x).replace(',', ' ') print(y)
# Python 3. PyQt4 # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore # ЦВЕТА ПОЛЕЙ sss_vivod = ("background-color: #456173; color: #f2f2f0; font: 14pt 'Courier New'") # ГРАФИКА class Window(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.resize(200, 100) # шир / выс окна # БЛОК РАЗМЕТКИ self.vbox = QtGui.QVBoxLayout() # --- self.pole = QtGui.QLineEdit('') self.pole.setStyleSheet(sss_vivod) self.pole.textEdited.connect(self.razd) self.vbox.addWidget(self.pole) # --- self.setLayout(self.vbox) # ЛОГИКА def razd(self): x = self.pole.text().replace(' ','') if x.find('.') == -1: x1 = x x2 = '' else: x1 = x[:x.find('.')] x2 = x[x.find('.'):len(x)] x1 = '{0:,}'.format(int(x1)).replace(',', ' ') x = ''.join(x1+x2) self.pole.setText(x) # КОНЕЦ if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Window() # создаёт экземпляр окна из класса window.show() # запускает окно sys.exit(app.exec_())
Офлайн
PEHDOM, как интересно Вы опередили мой пост на 1,5 минуты.
Вашу задачу с классом я решил:
import sys from PyQt4 import QtGui, QtCore # ЦВЕТА ПОЛЕЙ sss_vivod = ("background-color: #456173; color: #f2f2f0; font: 14pt 'Courier New'") # ГРАФИКА class LineEditRazd(QtGui.QLineEdit): def init(self, *args, **kwargs): super().__init__() def razd(self, *args): x = self.text().replace(' ','') if x.find('.') == -1: x1 = x x2 = '' else: x1 = x[:x.find('.')] x2 = x[x.find('.'):len(x)] x1 = '{0:,}'.format(int(x1)).replace(',', ' ') x = ''.join(x1+x2) self.setText(x) class Window(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.resize(200, 100) # шир / выс окна # БЛОК РАЗМЕТКИ self.vbox = QtGui.QVBoxLayout() # --- self.pole = LineEditRazd('') self.pole.setStyleSheet(sss_vivod) self.pole.textEdited.connect(self.pole.razd) self.vbox.addWidget(self.pole) # --- self.setLayout(self.vbox) # КОНЕЦ if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Window() # создаёт экземпляр окна из класса window.show() # запускает окно sys.exit(app.exec_())
Офлайн
Ну скажем так, это решение в лоб самое простое но не самое лучшее. Если вы захотите получить значения из поля(не важно как скопировав содержимое в буфер обмена из GUI или вызвав метод text() из скрипта ), вы и получите “12 345 678” с пробелами.. Что чревато дополнительными движениями, както убирание “лишних” пробелов при получении значения поля. Но в принципе если вас такое поведение программы устраивает то все ОК.
Переопределение paintEvent лишено этих недостатков, вы изменяете только отображаемый в GUI текст, оставляя значение хранимое в виджете неизменным. НО повторюсь, это требует достаточно глубокого знания Qt.Или в вашем случа нужно чтото делать с методом text() и что там отвечает за копирование в буфер… чтобы каждый раз после выхова метода не танцевать с бубном..
PS Если введете букву в поле то получите исклчение…
[code python][/code]
Отредактировано PEHDOM (Сен. 7, 2017 12:04:01)
Офлайн