Russian Qt Forum
Март 29, 2024, 11:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qtablewidget и contextmenu  (Прочитано 4261 раз)
ispryt
Гость
« : Сентябрь 15, 2017, 08:56 »

У меня есть такой код:
Код
Python
class WindowsOutCallC(QDialog):
 
 def __init__(self):
   super().__init__()
   self.main()
   self.ConstData()
 def main(self):
    ICText = "наименование контрагента"
    GText = "город"
    INNText = "инн контрагента"
    KLText = "контактное лицо"
    DText = "должность"
    NText = "номер"
    DTText = "дата"
    NSText = "наименование события"
    CText = "комментарий"
    self.grid100 = QGridLayout()
    self.grid100.setSpacing(2)
    self.ICTextLine = QLineEdit(self)
    self.INNTextLine = QLineEdit(self)
    self.GTextLine = QLineEdit(self)
    #self.KLTextTextLine = QLineEdit(self)
    #self.DTextLine = QLineEdit(self)
    self.CTextLine = QTextEdit(self)
    #self.NTextLine = QLineEdit(self)
    self.CBTNAdd = QPushButton("Добавить номер ")
    self.KLTable = QTableWidget()
    self.ICTextLine.setText(ICText)
    self.INNTextLine.setText(INNText)
    self.GTextLine.setText(GText)
    #self.KLTextTextLine.setText(KLText)
    #self.DTextLine.setText(DText)
    self.CTextLine.setText(CText)
    #self.NTextLine.setText(NText)
    #print (result[0])
    #for line in result:
    #   print (line)
    #   print (line[0])
    self.KLTable.setRowCount(5)
    self.KLTable.setColumnCount(10)
    self.KLTable.setHorizontalHeaderLabels(["Код","Имя","Фамилия", "Отчество", "Должность", "Номер 1", "Номер 2", "Номер 3", "Номер 4", "Номер 5"])
    self.grid100.addWidget(self.ICTextLine, 0, 0, 1, 4)
    self.grid100.addWidget(self.INNTextLine, 1, 0, 1, 4)
    self.grid100.addWidget(self.GTextLine, 2, 0, 1, 4)
    #self.grid100.addWidget(self.KLTextTextLine, 3, 0, 1, 1)
    #self.grid100.addWidget(self.DTextLine, 3, 1, 1, 1)
    #self.grid100.addWidget(self.NTextLine, 3, 2, 1, 1)
    #self.grid100.addWidget(self.CBTNAdd, 3, 3, 1, 1)
    self.grid100.addWidget(self.CTextLine, 4, 0, 1, 4)
    self.grid100.addWidget(self.KLTable, 5, 0, 1, 4)
    self.setLayout(self.grid100)
    self.setMinimumHeight(600)
    self.setMinimumWidth(1000)
    #self.KLTable.cellDoubleClicked.connect(self.Update2SQL)
    #self.KLTable.cellDoubleClicked.connect(self.handleCellActivated)
 
 def ConstData(self):
    result = check_number("3434")
    print(result)
    if result:
     k = (len(result))
     print(k)
     self.KLTable.setRowCount(k+3)
     for r in range(k):
       print(result[r][1])
       print(result[r][2])
       print(result[r][3])
       print(result[r][4])
       print(result[r][5])
       print(result[r][6])
       print(result[r][7])
       print(result[r][8])
       print(result[r][9])
       self.KLTable.setItem(r, 0, QTableWidgetItem(str(result[r][0])))
       self.KLTable.setItem(r, 1, QTableWidgetItem(result[r][2]))
       self.KLTable.setItem(r, 2, QTableWidgetItem(result[r][3]))
       self.KLTable.setItem(r, 3, QTableWidgetItem(result[r][4]))
       self.KLTable.setItem(r, 4, QTableWidgetItem(result[r][5]))
       self.KLTable.setItem(r, 5, QTableWidgetItem(result[r][6]))
       self.KLTable.setItem(r, 6, QTableWidgetItem(result[r][7]))
       self.KLTable.setItem(r, 7, QTableWidgetItem(result[r][8]))
       self.KLTable.setItem(r, 8, QTableWidgetItem(result[r][9]))
       self.KLTable.setItem(r, 9, QTableWidgetItem(result[r][10]))
 
     codec = query_to_base("select name, inn, city, comment from c where codec='" + str(result[0][1]) + "';")
     print(codec)
     self.ICTextLine.setText(codec[0][0])
     self.INNTextLine.setText(codec[0][1])
     self.GTextLine.setText(codec[0][2])
     self.CTextLine.setText(codec[0][3])
     self.KLTable.cellChanged.connect(self.Update2SQL)
 
 def contextMenuEvent(self, event):
     self.menu = QMenu(self)
     renameAction = QAction('Rename', self)
     renameAction.triggered.connect(lambda: self.renameSlot(event))
     self.menu.addAction(renameAction)
     # add other required actions
     self.menu.popup(QtGui.QCursor.pos())
 
 def renameSlot(self, event):
     print ("renaming slot called")
     # get the selected row and column
     print (event.pos().x())
     item = self.KLTable.itemAt(event.pos())
     print (item)
     row = self.KLTable.itemAt(event.pos())
     print (row)
     print (col)
     # get the selected cell
     #cell = self.KLTable.item(row, col)
     # get the text inside selected cell (if any)
     # get the widget inside selected cell (if any)
     widget = self.KLTable.cellWidget(row, col)
 

Я хочу, чтобы когда пользователь кликал правой кнопкой мыши на ячейку всплывало контекстное меню. Где был бы Экшн на добавление значения в эту ячейку.

Соответственно у меня затык в этом куске:

Код
Python
def renameSlot(self, event):
     print ("renaming slot called")
     # get the selected row and column
     print (event.pos().x())
     item = self.KLTable.itemAt(event.pos())
     print (item)
     row = self.KLTable.itemAt(event.pos())
     print (row)
     print (col)
     # get the selected cell
     #cell = self.KLTable.item(row, col)
     # get the text inside selected cell (if any)
     # get the widget inside selected cell (if any)
     widget = self.KLTable.cellWidget(row, col)

А именно: item = self.KLTable.itemAt(event.pos()) print (item)
В ячейке значение есть, а принт мне выдает:None

Пошел по другому пути

Но и тут затык:
Код
Python
self.KLTable.cellClicked.connect(self.cbtn)
 
 def cbtn(self, row, column):
     print (row)
     print (column)
     self.CBTNAdd.clicked.connect(lambda: self.cbtnpush(row, column))
 def cbtnpush(self, row, column):
     print(column)
     print(row)
 
Если кликнуть на одну ячейку и потом нажать кнопку, то выдаст row и column Но если перед тем как нажать кнопку - по кликать по нескольким ячейкам то выдает row и column всех, что покликали, а не последний. Почему он выводить на печать все?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Сентябрь 15, 2017, 15:27 »

Вам нужен сигнал customContextMenuRequested и установка http://doc.qt.io/qt-4.8/qwidget.html#contextMenuPolicy-prop

После в слоте показывать меню

Такое когда-то уже делал
Записан

ispryt
Гость
« Ответ #2 : Сентябрь 15, 2017, 15:35 »

Вам нужен сигнал customContextMenuRequested и установка http://doc.qt.io/qt-4.8/qwidget.html#contextMenuPolicy-prop

После в слоте показывать меню

Такое когда-то уже делал


Спасибо, посмотрю.

А можете оценить вариант с кнопкой? Почему если мы кликаем несколько ячеек присылает значения всех, что мы на кликали, а не последнее?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.122 секунд. Запросов: 22.