Форум сайта python.su
Продолжаю свою борьбу с pyqt, пока с переменным успехом.
На этот раз проблема возникла с перегрузкой copy(). Делаю примерно следующее:
class MyQTextEdit(QtGui.QTextEdit):
...
def copy(self):
QtGui.QTextEdit.copy(self)
print "copy"
void QTextEdit::copyAvailable ( bool yes )Дайте, плиз, направление куда копать?
This signal is emitted when text is selected or de-selected in the text edit.
When text is selected this signal will be emitted with yes set to true. If no text has been selected or if the selected text is de-selected this signal is emitted with yes set to false.
If yes is true then copy() can be used to copy the selection to the clipboard. If yes is false then copy() does nothing.
See also selectionChanged().
void QTextEdit::copy ()
Copies any selected text to the clipboard.
See also copyAvailable().
Отредактировано (Май 6, 2009 00:26:02)
Офлайн
Попробовал пойти в обход, обрабатываю сигнал copyAvailable(bool). Но он срабатывает только во время начала выделения текста или на снятие выделения, поэтому получить актуальные позиции выделенного текста не выходит.
Как вариант можно обрабатывать selectionChanged(), но этот сигнал срабатывает слишком часто, даже когда само выделение не меняется, а просто немного двигаешь курсор мышки, так что хотелось бы всё же сделать что-нибудь именно с самой операцией копирования.
Кстати, C++'ники говорят что copy() нельзя перегрузить, т.к. это не виртуальный метод… но python то не C++, или это сказывается результат портирования?
Офлайн
lizzard. А если вам попробовать как-то так отслеживать текст:
class TextEditor(QTextEdit):
def __init__(self):
QTextEdit.__init__(self)
self.connect(self,SIGNAL("copyAvailable(bool)"),self.copy)
self.connect(self,SIGNAL("cursorPositionChanged ()"),self.copy)
def copy(self):
print "copy"
print self.cursorRect().x()
Офлайн
В принципе вариант по лучше. Можно так делать:
class TextEditor(QtGui.QTextEdit):
def __init__(self):
QtGui.QTextEdit.__init__(self)
self.connect(self, SIGNAL("cursorPositionChanged()"), self.copy)
def copy(self):
cursor = self.textCursor()
if cursor.selectionStart() != cursor.selectionEnd():
print "Copy available"
Офлайн
Сигнал copyAvailable(bool) - только для проверки, как все работает.
А вообще-то у Mark Summerfield “Rapid Gui Programming with Python and Qt” подробно разобран PythonEditor, RichTextEditor. Книга есть в сети, где скачивал не помню, к сожалению. Думаю, она бы вам помогла. :)
Офлайн
Сенкс, как-нибудь гляну… давно хотел найти книгу по pyqt, только лень было искать =).
Офлайн
а задача-то какая? с чем боритесь? пока всё выглядит так, как буд-то вы тыкаете пальцем в небо, хотя это тоже по-научному:)
Офлайн
Всю задачу объяснить долго и лениво, но можно попробовать вкратце и частично.
В базе хранятся документы, в тексте документа каждый фрагмент имеет свой “уровень” (от 0 до 3, если упростить - каждый символ имеет уровень). В документ можно печатать текст с разными уровнями, так же необходимо реализовать копирование фрагментов текста из одного документа в другой без “потери уровня” копируемых фрагментов.
Для этого я и пытался отслеживать изменения в редактируемом тексте и сохранять для каждого введёного символа его уровень в отдельной переменной-строке. Это сделал, осталось сделать копирование и вставку, для чего хотел перегрузить copy() и paste(), но наткнулся на грабли :).
Была идея не создавать отдельную переменную для хранения уровня символа, а использовать что-нибудь вроде тегов, но я посчитал что текущее решение проще для меня =).
В итоге, после некоторого дополнения, должна получиться “защищённая система документооборота”, как её обозвали в универе. Надеюсь понятно объясняю %).
Офлайн
Я думаю, что не могу больше думать…
Офлайн
ZZZ, это Вы к чему? %) В общем то больше и не надо думать, задачку только что доделал, даже работает почти всегда =).
Офлайн