Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: aivs от Октябрь 06, 2011, 15:50



Название: Сделать не активным QLineEdit (новичок)
Отправлено: aivs от Октябрь 06, 2011, 15:50
Начал изучать PyQt4, и никак не могу найти информацию, как сделать элемент QLineEdit не активным, чтобы в нем нельзя было писать, в методах у него не нашел.

Есть строка для ввода текста
titleEdit = QtGui.QLineEdit()

Есть кнопка
ok = QtGui.QPushButton("OK")

Нужно чтобы кнопка блокировала ввод текста, организую связь
self.connect(ok, QtCore.SIGNAL('clicked()'), titleEdit, QtCore.SLOT(' что за метод ???'))

Подскажите как сделать элемент не активным, а лучше ткните где об этом написано !!


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: Пантер от Октябрь 06, 2011, 15:50
setEnabled
setDisabled


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: aivs от Октябрь 06, 2011, 16:18
Такой метод я пробовал, из QWidget он.

Делаю так
self.connect(ok, QtCore.SIGNAL('clicked()'), titleEdit, QtCore.SLOT('setDisabled()'))

И при запуске программы у меня сообщение:

[aivs@myhost pyqt]$ ./pyarchnetcfg.py
Object::connect: No such slot QLineEdit::setDisabled()


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: Larry от Октябрь 06, 2011, 16:24
а как ты объявил слот setDisabled()? Он у тебя не может соединиться со слотом...У меня такое было при опечатках:)


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: aivs от Октябрь 06, 2011, 16:32
Судя по всему никак я не объявлял слот, я думал они всегда доступны, как методы
Моя программа:
Код
Python
#!/usr/bin/python
 
import sys
from PyQt4 import QtGui, QtCore
 
class GridNetCgf(QtGui.QWidget):
   def __init__(self, parent=None):
           QtGui.QWidget.__init__(self, parent)
 
           self.setWindowTitle("Окно")
 
           """Поля для правки адресов"""
           ipEdit = QtGui.QLineEdit()
 
           """Кнопки"""
           ok = QtGui.QPushButton("ok")
 
           """Расстановка элементов"""
           hbox = QtGui.QHBoxLayout()
           hbox.addWidget(ok)
           hbox.addWidget(ipEdit)
 
           self.setLayout(hbox)
           self.resize(300,200)
 
           """Сигналы и слоты"""
           self.connect(ok, QtCore.SIGNAL('clicked()'), ipEdit, QtCore.SLOT('setDisabled()'))
 
app = QtGui.QApplication(sys.argv)
qb = GridNetCgf()
qb.show()
sys.exit(app.exec_())


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: Larry от Октябрь 06, 2011, 16:35
я не знаю как в питоне объявляется, но в с++
Код:
public slots:
        void setDisabled();

и потом этот слот надо определить...


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: kambala от Октябрь 06, 2011, 16:38
вообще-то эти 2 слота имеют параметр типа bool. можешь создать свой слот (disableLineEdit() к примеру), в котором просто будешь вызывать lineEdit.setDisabled(true): self.connect(ok, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT('disableLineEdit()'))


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: Larry от Октябрь 06, 2011, 16:50
извиняюсь, эт я протупил  ;D...переработал, бывает  ;D


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: aivs от Октябрь 06, 2011, 17:12
Спасибо, почитаю как создать свой слот в python


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: iroln от Октябрь 07, 2011, 22:44
Ну вы даёте. setReadOnly(bool flag) же. :) Редактировать нельзя, выделять и копировать текст можно. Это лучше чем setEnabled, я гарантирую! :)


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: kambala от Октябрь 08, 2011, 00:53
и правда :) но от создания собственного слота это не оградит.


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: aivs от Октябрь 09, 2011, 16:28
и правда :) но от создания собственного слота это не оградит.
Мне нужно, чтобы визуально виджет выглядел бы заблокированным, ни копировать, ни вставлять.


Название: Re: Сделать не активным QLineEdit (новичок)
Отправлено: kambala от Октябрь 09, 2011, 16:44
значит в слоте вызвать lineEdit.setEnabled(false) (или lineEdit.setDisabled(true), что аналогично)