Сломал себе уже весь моск. Не могу понять, почему айтемы не добавляются.
Вот такой вот простой код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import uic
class TdlgMain(QDialog):
def __init__(self,parent=None):
QDialog.__init__(self,parent)
uiClass,qtBaseClass=uic.loadUiType('form1.ui')
self.ui=uiClass()
self.ui.setupUi(self)
def AddEntry(self):
print'AddEntry(%r)'%self.ui.lineEdit1.text()
# ^-- показывает: AddEntry(PyQt4.QtCore.QString(u'тут строка из lineEdit1'))
# т.е. вроде всё правильно...
self.ui.listBox1.addItem(self.ui.lineEdit1.text())
# ^-- тут ничего не происходит :(if __name__ =='__main__':
app=QApplication(sys.argv)
dlgMain=TdlgMain()
dlgMain.show()
sys.exit(app.exec_())
form.ui создана в QtDesigner4.
AddEntry() добавлен как слот формы и привязан к сигналу returnPressed() виджета lineEdit1.
listBox1 -- QListWidget, lineEdit1 -- QLineEdit.
Даже уже и не знаю, куда дальше думать...
/Best regards,
Anton V. Deinow
Re: [Python+PyQt] не работает QListWidget.addItem()
Здравствуйте, DemAS, Вы писали:
>> PS. Самое обидное, что при addItem() вообще ничего не происходит. Хоть бы ошибку какую генерил, а то просто возваращает None и тишина.
DAS>А можешь выложить где-нибудь полный проект. Будет время — завтра гляну.
Вдогонку:
T>Сломал себе уже весь моск. Не могу понять, почему айтемы не добавляются. T>Вот такой вот простой код:
<..код поскипан..> T>Даже уже и не знаю, куда дальше думать...
Более того, выяснилось, что если были айтемы, созданные в дизайнере, то после addItem() они исчезают. Но при этом listBox1.count() возвращает 1, хотя список выглядит пустым (ничего не отображается и не выбирается).
На что это я такое напоролся?..
/Best regards,
Anton V. Deinow
Re[5]: [Python+PyQt] не работает QListWidget.addItem()
Не катит. Мне список нужен, самый простой. Нафига из пушки по воробьям. Уж лучше тогда на gtk пересесть.
DAS>Ну или есть смысл написать в профильную news-группу — может чем помогут. DAS>Если найдешь ответ, напиши пож-та здесь — мне тоже интересно.
Уже вторые сутки ищу.
Кста, проблема наблюдается только в варианте, когда я форму загружаю из .ui-файла. Если предварительно её через pyuic4 пропустить и написать так:
import form1
class TdlgMain(QDialog,form1.Ui_Form1):
def __init__(self,parent=None):
super(TdlgMain,self).__init__(parent)
self.setupUi(self)
def AddEntry(self):
self.listBox1.addItem(self.lineEdit1.text())
if __name__ =='__main__':
app=QApplication(sys.argv)
dlgMain=TdlgMain()
dlgMain.show()
sys.exit(app.exec_())
все работает. Но этот вариант не катит, ибо а) дополнительный геморой; и б) каша в классе получается.
/Best regards,
Anton V. Deinow
Re[6]: Решено: [Python+PyQt] не работает QListWidget.addItem
Здравствуйте, DemAS, Вы писали:
DAS>Честно говоря сам не понял, но не работает. DAS>Хотя, если верить google все правильно:
<..skip..>
DAS>Ну или есть смысл написать в профильную news-группу — может чем помогут. DAS>Если найдешь ответ, напиши пож-та здесь — мне тоже интересно.
Всё, разобрался. Красивые грабли поймал.
Короче, задумывалось так: при нахождении фокуса ввода в lineEdit1 и нажатии Enter от lineEdit1 должен был посылаться сигнал returnPressed() форме Form1.AddEntry(). Но! У pushButton1 свойство autoDefault == True и получалось, что отсылалось одновременно(?) два сигнала returnPressed() и clicked(), что и приводило к такому замысловатому поведению.
Такое поведение кнопок характерно для QDialog. Так что если бы я наследовался от QMainWindow или, скажем, от QWidget, то всё работало бы как и задумывалось.