На самом деле, это вовсе не кажется таким уж бредом. Это на самом деле довольно специфично и немного сложно.
Я дам вам шаги для начала, но поскольку вы начинаете (и вы не опубликовали какой-либо конкретный код), вам будет лучше создать код самостоятельно на основе документации и моих советов.
Кстати, поищите официальную документацию по PyGTK — это должен быть ваш окончательный источник для всех объектов и функций PyGTK. Она очень хорошо написана и исчерпывающая, и мне редко приходится искать более пяти минут, чтобы найти то, что мне нужно.
Я предлагаю вам использовать три сигнала, подключенных к вашей области рисования.
Создайте три обратных вызова (руководство здесь), по одному для каждого события. Подключите область рисования к своим событиям и обратным вызовам (опять же, см. учебник. Возможно, вам придется пройти несколько страниц по нему).
Вам также потребуется создать две логические переменные на глобальном уровне (над основным классом, на том же уровне, где вы импортируете модули). Первая определяет, выбран ли инструмент выбора (назовите его «Select_On»), а вторая если он активен (назовите его "Select_Active")
На кнопке, которую вы используете для запуска инструмента выбора, установите для параметра «Select_On» значение «True». Вероятно, это должна быть кнопка-переключатель, поэтому убедитесь, что вы настроили ее так, чтобы «Select_On» отключался, если вы отключаете кнопку.
При нажатии кнопки создайте объект для выбора. То, что вы делаете сейчас, на самом деле должно работать хорошо. Также установите «Select_Active» в «True».
В событии уведомления о движении измените размер вашего объекта в зависимости от положения курсора. Обратитесь к этой документации для этого конкретного типа объекта, чтобы узнать, как изменить его размер, и обратитесь к здесь, чтобы узнать, как получить позицию курсора.
Будьте готовы написать алгоритм, чтобы определить, как изменить размер объекта выделения в зависимости от положения курсора. Если вам нужна помощь в этом, не стесняйтесь просить об этом в отдельном вопросе.
В событии кнопки-релиза установите для "Select_Active" значение "False" и вызовите весь свой код для фактического подтверждения выбора.
Кроме того, преимущество использования «события-уведомления о движении» заключается в том, что, как только курсор покидает выбранный виджет, поле выбора перестает изменять размеры. Курсор должен повторно войти в виджет, чтобы продолжить изменение размера поля выбора.
Я надеюсь, что все это сработает для вас, и желаю вам всего наилучшего в вашем проекте!
person
CodeMouse92
schedule
12.09.2011