Форум сайта python.su
Kyrymself применяется и к методам, то есть если метод а экземпляра класса вызывает метод в этого же экземпляра то нужно писать так
Window.in_ch_f(self,a)
Отредактировано MrViktor (Апрель 20, 2017 15:26:03)
Офлайн
Хм… вместо Window.in_ch_f(self,a) пишу self.in_ch_f(self,a) и вижу:
TypeError: in_ch_f() takes 2 positional arguments but 3 were givenВидимо, надо ещё что-то менять.
Офлайн
Kyrymвы можете вместо Window.in_ch_f(self,a) писать self.in_ch_f(a)
Хм… вместо Window.in_ch_f(self,a) пишу self.in_ch_f(self,a) и вижу:
# -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore # ЦВЕТА ПОЛЕЙ sss_vivod = ("background-color: #456173; color: #f2f2f0; font: 12pt 'Courier New'") # ДАННЫЕ # ГРАФИКА class Window(QtGui.QWidget): # Класс Window наследует класс QWidget def __init__(self, parent=None, *args, **kwargs): # Создаёт конструктор класса, parent - ссылка на родительский эл-т QtGui.QWidget.__init__(self, parent) self.setMinimumSize(200, 200) # Ширина и высота окна self.resize(200, 200) # шир / выс окна self.setWindowTitle('Исключения') # Заголовок self.setWindowIcon(QtGui.QIcon('icon.png')) # Иконка # БЛОК РАЗМЕТКИ self.vbox_os = QtGui.QVBoxLayout() # --- self.pole = QtGui.QLineEdit() self.pole.setStyleSheet(sss_vivod) self.vbox_os.addWidget(self.pole) # --- self.pole_2 = QtGui.QLineEdit() self.pole_2.setStyleSheet(sss_vivod) self.vbox_os.addWidget(self.pole_2) # --- self.btn = QtGui.QPushButton('Выполнить') self.btn.clicked.connect(self.on_start) self.vbox_os.addWidget(self.btn) # --- self.pole_vivod = QtGui.QTextEdit('') self.pole_vivod.setStyleSheet(sss_vivod) self.vbox_os.addWidget(self.pole_vivod) # --- self.setLayout(self.vbox_os) # установка рабочей области # ЛОГИКА def on_start(self, x=None): def ap(i): data.append(i) data = [] self.pole_vivod.setText('') a = self.pole.text() print('on_start до функции, a =',a) a = self.in_ch_f(a) # Да, можно вот так print('on_start после функции, a =',a) ap(a) print('-'*50) b = self.pole_2.text() # Да, можно вот так print('on_start до функции, b =',b) b = self.in_ch_f(b) print('on_start после функции, b =',b) ap(b) print('='*50) for i in data: self.pole_vivod.append(str(i)) def in_ch_f(self,x): # Наш метод возавращает результат try: x = float(x) print('try, x =',x) except (TypeError, ValueError): print('except, x =',x) x = 0 return x # КОНЕЦ if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Window() # создаёт экземпляр окна из класса window.show() # запускает окно sys.exit(app.exec_())
# -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore # ЦВЕТА ПОЛЕЙ sss_vivod = ("background-color: #456173; color: #f2f2f0; font: 12pt 'Courier New'") # ДАННЫЕ # ГРАФИКА class Window(QtGui.QWidget): # Класс Window наследует класс QWidget def __init__(self, parent=None, *args, **kwargs): # Создаёт конструктор класса, parent - ссылка на родительский эл-т QtGui.QWidget.__init__(self, parent) self.setMinimumSize(200, 200) # Ширина и высота окна self.resize(200, 200) # шир / выс окна self.setWindowTitle('Исключения') # Заголовок self.setWindowIcon(QtGui.QIcon('icon.png')) # Иконка # БЛОК РАЗМЕТКИ self.vbox_os = QtGui.QVBoxLayout() # --- self.pole = QtGui.QLineEdit() self.pole.setStyleSheet(sss_vivod) self.vbox_os.addWidget(self.pole) # --- self.pole_2 = QtGui.QLineEdit() self.pole_2.setStyleSheet(sss_vivod) self.vbox_os.addWidget(self.pole_2) # --- self.btn = QtGui.QPushButton('Выполнить') self.btn.clicked.connect(self.on_start) self.vbox_os.addWidget(self.btn) # --- self.pole_vivod = QtGui.QTextEdit('') self.pole_vivod.setStyleSheet(sss_vivod) self.vbox_os.addWidget(self.pole_vivod) # --- self.setLayout(self.vbox_os) # установка рабочей области # ЛОГИКА def on_start(self, x=None): def ap(i): data.append(i) data = [] self.pole_vivod.setText('') a = self.pole.text() print('on_start до функции, a =',a) a = Window.in_ch_f(a) # вызываем in_ch_f через класс print('on_start после функции, a =',a) ap(a) print('-'*50) b = self.pole_2.text() print('on_start до функции, b =',b) b = self.in_ch_f(b) # вызываем in_ch_f через экземпляр print('on_start после функции, b =',b) ap(b) print('='*50) for i in data: self.pole_vivod.append(str(i)) @staticmethod #декоратор указывающий на то что in_ch_f статический метод def in_ch_f(x): # Обратите внимание self отсутвует как аргумент try: x = float(x) print('try, x =',x) except (TypeError, ValueError): print('except, x =',x) x = 0 return x # возвращаем значение # КОНЕЦ if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = Window() # создаёт экземпляр окна из класса window.show() # запускает окно sys.exit(app.exec_())
Kyrymне совсем просто перед тем как получить self.x вы в методе in_ch_f меняете его значение.
Суть в том, что ссылаясь a = self.x и b = self.x, я получаю разные self.x
[code python][/code]
Отредактировано PEHDOM (Апрель 20, 2017 17:24:07)
Офлайн
Получилось компактнее, что радует.
Офлайн
Решил писать в свою тему.
Есть код:
# Python 3 # -*- coding: utf-8 -*- import sys from PyQt4 import QtCore, QtGui from PyQt4.QtGui import (QWidget, qApp, QAction, QApplication, QHBoxLayout, QVBoxLayout, QGridLayout, QLabel, QLineEdit, QTextEdit, QPushButton, QComboBox, QCheckBox, QRadioButton, QFrame, QScrollArea, QTabWidget, QSizePolicy, QBrush, QColor) from PyQt4.QtGui import QIcon, QPixmap, QPalette, QTextCursor # ГРАФИКА class Window(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.resize(300, 100) # шир / выс окна self.setWindowTitle('несущ') # Заголовок grid = QGridLayout() grid.setSpacing(5) # --- --- self.columnCount = 4 self.lines = [None for i in range(self.columnCount)] #lst_on_start = ['self.on_start'+str(i) for i in range(columnCount)] #print('lst_on_start =',lst_on_start) for col in range(self.columnCount): line = QLineEdit() self.lines[col] = line grid.addWidget(line,0,col+1) self.lines[col].textChanged.connect(self.on_start) #self.lines[col].textChanged.connect(lst_on_start[col]) # --- --- self.setLayout(grid) def on_start(self): print('1') lst_data = [] for i in range(self.columnCount): lst_data.append(self.lines[i].text()) print('lst_data =',lst_data) # КОНЕЦ if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.move(40, 20) # сдвиг окна от верхнего левого угла экрана window.show() sys.exit(app.exec_())
lst_data = ['4', '', '16', '']
Отредактировано Kyrym (Дек. 15, 2017 19:35:23)
Офлайн
qlineedit.textChanged передает текст в аргументах
RTFM
https://pythonworld.ru/gui/pyqt5-widgets2.html
Офлайн
Да, таким образмо я смогу узнать последний переданный текст, найду его в своём списке lst_data, а значит, выясню через поиск номер столбца.
А сам сигнал textChanged не может передать некую заданную информацию, номер колонки в данном случае?
Пока так:
# Python 3 # -*- coding: utf-8 -*- import sys from PyQt4 import QtCore, QtGui from PyQt4.QtGui import (QWidget, qApp, QAction, QApplication, QHBoxLayout, QVBoxLayout, QGridLayout, QLabel, QLineEdit, QTextEdit, QPushButton, QComboBox, QCheckBox, QRadioButton, QFrame, QScrollArea, QTabWidget, QSizePolicy, QBrush, QColor) from PyQt4.QtGui import QIcon, QPixmap, QPalette, QTextCursor # ГРАФИКА class Window(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.resize(300, 100) # шир / выс окна self.setWindowTitle('несущ') # Заголовок grid = QGridLayout() grid.setSpacing(5) # --- --- self.columnCount = 4 self.lines = [None for i in range(self.columnCount)] #lst_on_start = ['self.on_start'+str(i) for i in range(columnCount)] #print('lst_on_start =',lst_on_start) for col in range(self.columnCount): line = QLineEdit() self.lines[col] = line grid.addWidget(line,0,col+1) self.lines[col].textChanged.connect(self.on_start) #self.lines[col].textChanged.connect(lst_on_start[col]) # --- --- self.setLayout(grid) def on_start(self, text): print('1') lst_data = [] for i in range(self.columnCount): lst_data.append(self.lines[i].text()) col_index = lst_data.index(text) print('lst_data =',lst_data) print('Столбец №',col_index) # КОНЕЦ if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.move(40, 20) # сдвиг окна от верхнего левого угла экрана window.show() sys.exit(app.exec_())
Отредактировано Kyrym (Дек. 15, 2017 20:51:03)
Офлайн
Kyrymможно создать свой сигнал, котороый будет передавать все что угодно, хоть номкр колонки, хоть черта лысого..
А сам сигнал textChanged не может передать некую заданную информацию, номер колонки в данном случае?
[code python][/code]
Офлайн
PEHDOMСвои элементы создавать сложно (для меня), потом оказывается, что нужно многое предусмотреть.
можно создать свой сигнал
# Python 3 # -*- coding: utf-8 -*- import sys from PyQt4 import QtCore, QtGui from PyQt4.QtGui import (QWidget, qApp, QAction, QApplication, QHBoxLayout, QVBoxLayout, QGridLayout, QLabel, QLineEdit, QTextEdit, QPushButton, QComboBox, QCheckBox, QRadioButton, QFrame, QScrollArea, QTabWidget, QSizePolicy, QBrush, QColor) from PyQt4.QtGui import QIcon, QPixmap, QPalette, QTextCursor # ГРАФИКА class Window(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.resize(300, 100) # шир / выс окна self.setWindowTitle('несущ') # Заголовок grid = QGridLayout() grid.setSpacing(5) # --- --- self.columnCount = 4 self.lst_obj_name = ['line' + str(i) for i in range(self.columnCount)] self.lines = [None for i in range(self.columnCount)] for col in range(self.columnCount): line = QLineEdit() line.setObjectName('line' + str(col)) self.lines[col] = line self.lines[col].textChanged.connect(self.on_start) grid.addWidget(line,0,col) # --- --- self.setLayout(grid) def on_start(self): print('press',self.sender().objectName(),self.sender().text()) col_index = self.lst_obj_name.index(self.sender().objectName()) print('Столбец №',col_index) # КОНЕЦ if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.move(40, 20) # сдвиг окна от верхнего левого угла экрана window.show() sys.exit(app.exec_())
Отредактировано Kyrym (Дек. 16, 2017 15:32:23)
Офлайн