2015-01-17 5 views
0

Я пытаюсь позволить своему пользователю выбрать дату и войти в базу дат, используя виджет dateedit, и я сделаю это с помощью делегата, но по какой-то причине он присоединяет время, а такжеpyqt4 dateedit delegate не хочет отображать время

class ProductDelegate(QtSql.QSqlRelationalDelegate): 
    def __init__(self): 
     super().__init__()  

    def createEditor(self, parent, option, index): 

     if index.column() == 3: 
      editor = QtGui.QDateEdit(parent) 
      now = QtCore.QDate.currentDate() 
      editor.setMinimumDate(now) 
      editor.setCalendarPopup(True) 
      return editor 
     else: 
      return QtSql.QSqlRelationalDelegate.createEditor(self, parent, option, index) 

строка, что осталось после того, как дата определена что-то вроде '30/01/2015 00:00:00' Я не хочу, время там? какова работа вокруг этого?

enter image description here

+0

Почему имеет значение, если включено время? Вы можете указать формат, если и когда он будет показан пользователю, независимо от того, что вы хотите. – jonrsharpe

+0

Я отредактировал вопрос, если вы посмотрели один раз без времени, были введены с использованием инструмента базы данных, но те, у которых есть время, было показано, как он отображается пользователю, как я могу указать формат? – Inthuson

ответ

2

Похоже, что вы не можете быть правильно форматирования значения при установке редактора и/или данные модели. Делегат должен, вероятно, выглядеть примерно так:

class ProductDelegate(QtSql.QSqlRelationalDelegate): 
    def createEditor(self, parent, option, index): 
     if index.column() == 3: 
      editor = QtGui.QDateEdit(parent) 
      now = QtCore.QDate.currentDate() 
      editor.setDisplayFormat('yyyy-MM-dd') 
      editor.setMinimumDate(now) 
      editor.setCalendarPopup(True) 
      return editor 
     return super(ProductDelegate, self).createEditor(parent, option, index) 

    def setEditorData(self, editor, index): 
     if index.column() == 3: 
      data = index.data() 
      if not isinstance(data, QtCore.QPyNullVariant): 
       editor.setDate(QtCore.QDate.fromString(data)) 
     else: 
      super(ProductDelegate, self).setEditorData(editor, index) 

    def setModelData(self, editor, model, index): 
     if index.column() == 3: 
      value = editor.date().toString('yyyy-MM-dd') 
      model.setData(index, value, QtCore.Qt.EditRole) 
     else: 
      super(ProductDelegate, self).setModelData(editor, model, index) 
+0

Какова цель данных редактора? & данные модели? – Inthuson

+0

@Inthuson. Они делают именно то, что предлагают их имена. Если вы переопределяете 'createEditor', вы также должны их переопределить, иначе делегат не сможет работать должным образом. Мой примерный код может быть немного упрощенным, хотя, поскольку он не пытается объяснить тот факт, что вы используете 'QSqlRelationalDelegate'. Однако, возможно, это будет достаточно хорошо, чтобы хотя бы решить проблему с форматированием даты - вы попробовали? – ekhumoro

+0

Невозможно получить ошибку /: '.py", строка 41, в setEditorData editor.setDate (QtCore.QDate.fromString (index.data())) ТипError: аргументы не соответствуют перегруженному вызову: QDate. fromString (str, Qt.DateFormat format = Qt.TextDate): аргумент 1 имеет неожиданный тип «QPyNullVariant» QDate.fromString (str, str): аргумент 1 имеет неожиданный тип «QPyNullVariant''' – Inthuson