Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQT. Сделать не активным QLineEdit (новичок) [RSS Feed]

#1 Окт. 9, 2011 16:30:11

aivs
От:
Зарегистрирован: 2011-05-26
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сделать не активным QLineEdit (новичок)

Начал изучать PyQt4, и никак не могу найти информацию, как сделать элемент QLineEdit не активным, чтобы в нем нельзя было писать.
Есть кнопка
ok = QtGui.QPushButton(“ok”)
Есть строка для редактирования
ipEdit = QtGui.QLineEdit()

При нажатии на кнопку, QLineEdit() должна становиться не активной.
У родителя - QWidget, нашел метод setDisabled, но если его просто прописать в QtCore.SLOT(), то не работает.
Думаю нужно свой слот создать, как это сделать ?

#!/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(метод который делает QLineEdit не активным))

app = QtGui.QApplication(sys.argv)
qb = GridNetCgf()
qb.show()
sys.exit(app.exec_())



Офлайн

#2 Окт. 9, 2011 17:34:49

PAVEL_USER
От:
Зарегистрирован: 2011-10-09
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сделать не активным QLineEdit (новичок)

как сделать элемент QLineEdit не активным, чтобы в нем нельзя было писать
lineEdit.setDisabled(True)
lineEdit.setReadOnly(True)
Что-нибудь из двух.



Отредактировано (Окт. 9, 2011 17:35:44)

Офлайн

#3 Окт. 10, 2011 16:51:38

aivs
От:
Зарегистрирован: 2011-05-26
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сделать не активным QLineEdit (новичок)

Так я конечно пробовал, вылетает ошибка.

ipEdit = QtGui.QLineEdit()
...
self.connect(save, QtCore.SIGNAL('clicked()'), ipEdit.setDisabled(True))
Вот такая ошибка:
[aivs@myhost pyqt]$ ./pyarchnetcfg.py 
Traceback (most recent call last):
File "./pyarchnetcfg.py", line 99, in <module>
qb = GridNetCgf()
File "./pyarchnetcfg.py", line 94, in __init__
self.connect(save, QtCore.SIGNAL('clicked()'), ipEdit.setDisabled(True))
TypeError: arguments did not match any overloaded call:
QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'



Отредактировано (Окт. 10, 2011 16:55:02)

Офлайн

#4 Окт. 10, 2011 17:35:18

aivs
От:
Зарегистрирован: 2011-05-26
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сделать не активным QLineEdit (новичок)

На данный момент я нашел один вариант сделать QLineEdit не активной:

#!/usr/bin/python

# pyarchnetcgf.py

import sys
from PyQt4 import QtGui, QtCore


class GridNetCgf(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

global ipEdit
ipEdit = QtGui.QLineEdit()
save = QtGui.QPushButton("Сохранить")
self.connect(save, QtCore.SIGNAL('clicked()'), self.DisableLine)

def DisableLine(self):
ipEdit.setDisabled(True)

app = QtGui.QApplication(sys.argv)
qb = GridNetCgf()
qb.show()
sys.exit(app.exec_())
Но это как то через жопу, для каждого элемента теперь функцию писать, которая будет делать его неактивным ??!!



Офлайн

#5 Окт. 10, 2011 18:03:54

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

PyQT. Сделать не активным QLineEdit (новичок)

Уж layout сами изобразите

#!/usr/bin/python
#-*- coding: UTF-8 -*-

import sys
from PyQt4 import QtGui, QtCore

class GridNetCgf(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ipEdit = QtGui.QLineEdit(self)
self.save = QtGui.QPushButton(u"Сохранить", self)
self.save.clicked.connect(lambda: self.ipEdit.setDisabled(True))

app = QtGui.QApplication(sys.argv)
qb = GridNetCgf()
qb.show()
sys.exit(app.exec_())



Офлайн

#6 Окт. 10, 2011 18:54:26

aivs
От:
Зарегистрирован: 2011-05-26
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сделать не активным QLineEdit (новичок)

Спасибо, Ваш вариант работает, такого синтаксиса я еще не видел, изучаю дальше!



Офлайн

#7 Окт. 11, 2011 11:29:43

aivs
От:
Зарегистрирован: 2011-05-26
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сделать не активным QLineEdit (новичок)

Я принял к сведению вариант truporez.
Скажите чем плох мой вариант! укажите правильный стиль.
Интересует именно использование глобальных переменных, есть ли минусы

#!/usr/bin/python

# pyarchnetcgf.py

import sys
from PyQt4 import QtGui, QtCore


class GridNetCgf(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.setWindowTitle("Сетевые настройки")

"""global переменные"""
global radioStatic
global radioAuto
global ipEdit
global maskEdit
global gatewayEdit
global dns1Edit
global dns2Edit
global dns3Edit
global save
global cancel

"""Радио кнопки Статически и Автоматически"""
radioStatic = QtGui.QRadioButton("Статически")
radioAuto = QtGui.QRadioButton("Автоматически")

"""Метки"""
ip = QtGui.QLabel("IP-адрес")
mask = QtGui.QLabel("Маска")
gateway = QtGui.QLabel("Шлюз")
dns1 = QtGui.QLabel("DNS1")
dns2 = QtGui.QLabel("DNS2")
dns3 = QtGui.QLabel("DNS3")
mac = QtGui.QLabel("MAC-адрес")

"""Подсказки для меток"""
ip.setToolTip("IP-адрес - уникальный сетевой адрес узла (компьютера) в компьютернойсети.\nЕго можно узнать у вашего провайдера или системного администратора.")
mask.setToolTip("Маска подсети - битовая маска, определяющая, какая часть IP-адреса \nузла сети относится к сети, а какая - к адресу узла в этой сети.")
gateway.setToolTip("Сетевой шлюз - предоставляет доступ в локальную сеть или интернет")
dns1.setToolTip("Сервер предоставляющий IP-адрес хоста по его имени")
dns2.setToolTip("Сервер предоставляющий IP-адрес хоста по его имени")
dns3.setToolTip("Сервер предоставляющий IP-адрес хоста по его имени")

"""Поля для правки адресов"""
ipEdit = QtGui.QLineEdit()
maskEdit = QtGui.QLineEdit()
gatewayEdit = QtGui.QLineEdit()
dns1Edit = QtGui.QLineEdit()
dns2Edit = QtGui.QLineEdit()
dns3Edit = QtGui.QLineEdit()
macAddress = QtGui.QLineEdit("123.123.123.123")
macAddress.setDisabled(True)

"""Кнопки сохранить и отмена"""
save = QtGui.QPushButton("Сохранить")
cancel = QtGui.QPushButton("Отмена")

"""Расстановка элементов по сетки"""
hboxRadio = QtGui.QHBoxLayout()
hboxRadio.addWidget(radioStatic)
hboxRadio.addWidget(radioAuto)

grid = QtGui.QGridLayout()
grid.setSpacing(5)

grid.addWidget(ip, 1, 0)
grid.addWidget(ipEdit, 1, 1)

grid.addWidget(mask, 2, 0)
grid.addWidget(maskEdit, 2, 1)

grid.addWidget(gateway, 3, 0)
grid.addWidget(gatewayEdit, 3, 1)

grid.addWidget(dns1, 4, 0)
grid.addWidget(dns1Edit, 4, 1)

grid.addWidget(dns2, 5, 0)
grid.addWidget(dns2Edit, 5, 1)

grid.addWidget(dns3, 6, 0)
grid.addWidget(dns3Edit, 6, 1)

grid.addWidget(mac, 7, 0)
grid.addWidget(macAddress, 7, 1)

hboxButton = QtGui.QHBoxLayout()
hboxButton.addStretch(1)
hboxButton.addWidget(save)
hboxButton.addWidget(cancel)

vbox = QtGui.QVBoxLayout()
vbox.addLayout(hboxRadio)
vbox.addLayout(grid)
vbox.addLayout(hboxButton)

"""Геометрия окна"""
self.setLayout(vbox)
self.setGeometry(300,300,0, 0)

"""Сигналы и слоты"""
self.connect(cancel, QtCore.SIGNAL('clicked()'), QtGui.qApp, QtCore.SLOT('quit()'))
self.connect(radioAuto, QtCore.SIGNAL('toggled(bool)'), self.disableAll)
self.connect(radioStatic, QtCore.SIGNAL('toggled(bool)'), self.enableAll)

"""Сделать элементы не активными"""
def disableAll(self):
ipEdit.setDisabled(True)
maskEdit.setDisabled(True)
gatewayEdit.setDisabled(True)
dns1Edit.setDisabled(True)
dns2Edit.setDisabled(True)
dns3Edit.setDisabled(True)

"""Сделать элементы активными"""
def enableAll(self):
ipEdit.setDisabled(False)
maskEdit.setDisabled(False)
gatewayEdit.setDisabled(False)
dns1Edit.setDisabled(False)
dns2Edit.setDisabled(False)
dns3Edit.setDisabled(False)

app = QtGui.QApplication(sys.argv)
qb = GridNetCgf()
qb.show()
sys.exit(app.exec_())



Отредактировано (Окт. 11, 2011 11:31:02)

Офлайн

#8 Окт. 11, 2011 11:51:17

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

PyQT. Сделать не активным QLineEdit (новичок)

Ой-ёй. Уберите global напрочь. Сохраняйте ссылки на объекты в самом экземпляре через self, процедурный, Вы, наш.



Офлайн

#9 Окт. 11, 2011 12:08:38

aivs
От:
Зарегистрирован: 2011-05-26
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT. Сделать не активным QLineEdit (новичок)

Переписал, так в чем минусы global, перед self ?

#!/usr/bin/python

# pyarchnetcgf.py

import sys
from PyQt4 import QtGui, QtCore


class GridNetCgf(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.setWindowTitle("Сетевые настройки")

"""Радио кнопки Статически и Автоматически"""
self.radioStatic = QtGui.QRadioButton("Статически", self)
self.radioAuto = QtGui.QRadioButton("Автоматически", self)
self.radioStatic.setChecked(True)

"""Метки"""
ip = QtGui.QLabel("IP-адрес")
mask = QtGui.QLabel("Маска")
gateway = QtGui.QLabel("Шлюз")
dns1 = QtGui.QLabel("DNS1")
dns2 = QtGui.QLabel("DNS2")
dns3 = QtGui.QLabel("DNS3")
mac = QtGui.QLabel("MAC-адрес")

"""Подсказки для меток"""
ip.setToolTip("IP-адрес - уникальный сетевой адрес узла (компьютера) в компьютернойсети.\nЕго можно узнать у вашего провайдера или системного администратора.")
mask.setToolTip("Маска подсети - битовая маска, определяющая, какая часть IP-адреса \nузла сети относится к сети, а какая - к адресу узла в этой сети.")
gateway.setToolTip("Сетевой шлюз - предоставляет доступ в локальную сеть или интернет")
dns1.setToolTip("Сервер предоставляющий IP-адрес хоста по его имени")
dns2.setToolTip("Сервер предоставляющий IP-адрес хоста по его имени")
dns3.setToolTip("Сервер предоставляющий IP-адрес хоста по его имени")

"""Поля для правки адресов"""
self.ipEdit = QtGui.QLineEdit(self)
self.maskEdit = QtGui.QLineEdit(self)
self.gatewayEdit = QtGui.QLineEdit(self)
self.dns1Edit = QtGui.QLineEdit(self)
self.dns2Edit = QtGui.QLineEdit(self)
self.dns3Edit = QtGui.QLineEdit(self)
self.macAddress = QtGui.QLineEdit("123.123.123.123", self)
self.macAddress.setDisabled(True)

"""Кнопки сохранить и отмена"""
self.save = QtGui.QPushButton("Сохранить", self)
self.cancel = QtGui.QPushButton("Отмена", self)

"""Расстановка элементов по сетки"""
hboxRadio = QtGui.QHBoxLayout()
hboxRadio.addWidget(self.radioStatic)
hboxRadio.addWidget(self.radioAuto)

grid = QtGui.QGridLayout()
grid.setSpacing(5)

grid.addWidget(ip, 1, 0)
grid.addWidget(self.ipEdit, 1, 1)

grid.addWidget(mask, 2, 0)
grid.addWidget(self.maskEdit, 2, 1)

grid.addWidget(gateway, 3, 0)
grid.addWidget(self.gatewayEdit, 3, 1)

grid.addWidget(dns1, 4, 0)
grid.addWidget(self.dns1Edit, 4, 1)

grid.addWidget(dns2, 5, 0)
grid.addWidget(self.dns2Edit, 5, 1)

grid.addWidget(dns3, 6, 0)
grid.addWidget(self.dns3Edit, 6, 1)

grid.addWidget(mac, 7, 0)
grid.addWidget(self.macAddress, 7, 1)

hboxButton = QtGui.QHBoxLayout()
hboxButton.addStretch(1)
hboxButton.addWidget(self.save)
hboxButton.addWidget(self.cancel)

vbox = QtGui.QVBoxLayout()
vbox.addLayout(hboxRadio)
vbox.addLayout(grid)
vbox.addLayout(hboxButton)

"""Геометрия окна"""
self.setLayout(vbox)
self.setGeometry(300,300,0, 0)

"""Сигналы и слоты"""
self.connect(self.cancel, QtCore.SIGNAL('clicked()'), QtGui.qApp, QtCore.SLOT('quit()'))
self.connect(self.radioAuto, QtCore.SIGNAL('toggled(bool)'), self.disableAll)
self.connect(self.radioStatic, QtCore.SIGNAL('toggled(bool)'), self.enableAll)

"""Сделать элементы не активными"""
def disableAll(self):
self.ipEdit.setDisabled(True)
self.maskEdit.setDisabled(True)
self.gatewayEdit.setDisabled(True)
self.dns1Edit.setDisabled(True)
self.dns2Edit.setDisabled(True)
self.dns3Edit.setDisabled(True)

"""Сделать элементы активными"""
def enableAll(self):
self.ipEdit.setDisabled(False)
self.maskEdit.setDisabled(False)
self.gatewayEdit.setDisabled(False)
self.dns1Edit.setDisabled(False)
self.dns2Edit.setDisabled(False)
self.dns3Edit.setDisabled(False)

app = QtGui.QApplication(sys.argv)
qb = GridNetCgf()
qb.show()
sys.exit(app.exec_())



Офлайн

#10 Окт. 11, 2011 13:00:45

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

PyQT. Сделать не активным QLineEdit (новичок)

Очевидно главная проблема в том, что это глобальные переменные, не принадлежащие объекту. Если вы создадите еще один объект таким способом, получите разнообразные глюки.
Вам бы книжки по ООП почитать, ну и по самому python.



Офлайн

  • Начало
  • » GUI
  • » PyQT. Сделать не активным QLineEdit (новичок)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version