PyQt5 Tablewidget hücre güncelleme sorunu

Arkadaşlar merhaba tablewidgetime veritabanımdan verileri getiriyorum. İstediğim gibi arama yapabiliyorum.
Fakat mesela bir hücreye tıklayınca onu line edit bölümüne getirip güncellemek değil de direk hücredeki yazıyı değiştirip güncellemenin bir yolu var mı?

import requests
from bs4 import BeautifulSoup
import sqlite3
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import QPalette,QColor
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import QMainWindow
from kayit_ara import Ui_MainWindow
class veri_cekme(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        self.connect = sqlite3.connect('C:\python_veri_cekme_veritabani\python_job_veritabani.db')
        self.im = self.connect.cursor()
        veritabani = """CREATE TABLE IF NOT EXISTS PythonJob(id INTEGER PRIMARY KEY AUTOINCREMENT,Uzmanlık TEXT,Sirket TEXT,Ulke TEXT,Tarih TEXT)"""
        # im.execute("""DROP TABLE PythonJob""")
        self.im.execute(veritabani)

        #self.ui.tableWidget.itemSelectionChanged.connect(self.doldur)
        self.ui.tableWidget.horizontalHeader().setSectionsClickable(False)


        self.ui.pushButton.clicked.connect(self.table_calistir)
        self.ui.pushButton_2.clicked.connect(self.table_add)
        self.ui.lineEdit.textChanged.connect(self.ara)
        self.ui.lineEdit_4.textChanged.connect(self.ara1)
        self.ui.lineEdit_3.textChanged.connect(self.ara2)
        self.ui.lineEdit_2.textChanged.connect(self.ara3)
        self.calistirilacak_kod()

    def table_add(self):
        '''
        row = self.ui.tableWidget.currentRow()  # Index of Row
        firstColumnInRow = self.ui.tableWidget.item(row, 0)  # returns QTableWidgetItem
        text = firstColumnInRow.text()  # content of this
        print(text)
        return str(text)  # if this is a index, you propably dont want it as text
        '''

        a=self.ui.tableWidget.columnCount()
        self.ui.tableWidget.insertRow(a)









    def ara3(self,tarih):
        try:
            col=3
            rows=self.ui.tableWidget.rowCount()
            for row in range(rows):
                item=self.ui.tableWidget.item(row,col)
                if item is not None:
                    if tarih.lower() in item.text().lower():
                        self.ui.tableWidget.showRow(row)
                    else:
                        self.ui.tableWidget.hideRow(row)
        except Exception as Hata:
            print("hata")

    def ara2(self,ulke):
        try:
            col=2
            rows=self.ui.tableWidget.rowCount()
            for row in range(rows):
                item=self.ui.tableWidget.item(row,col)
                if item is not None:
                    if ulke.lower() in item.text().lower():
                        self.ui.tableWidget.showRow(row)
                    else:
                        self.ui.tableWidget.hideRow(row)
        except Exception as Hata:
            print("hata")


    def ara1(self,sirket):
        try:
            col=1
            rows=self.ui.tableWidget.rowCount()
            for row in range(rows):
                item=self.ui.tableWidget.item(row,col)
                if item is not None:
                    if sirket.lower() in item.text().lower():
                        self.ui.tableWidget.showRow(row)
                    else:
                        self.ui.tableWidget.hideRow(row)
        except Exception as Hata:
            print("hata")

    def ara(self,uzmanlik):

        try:
            col=0
            rows=self.ui.tableWidget.rowCount()
            for row in range(rows):
                item=self.ui.tableWidget.item(row,col)
                if item is not None:
                    if uzmanlik.lower() in item.text().lower():
                        self.ui.tableWidget.showRow(row)
                    else:
                        self.ui.tableWidget.hideRow(row)
        except Exception as Hata:
            print("hata")
    def calistirilacak_kod(self):
        url = "https://www.python.org/jobs"


        #veriyi_getir = self.im.execute("SELECT * FROM PythonJob WHERE Uzmanlık='" + + "' ")
        #karsilastir = veriyi_getir.fetchall()

        deneme=self.im.execute("""SELECT Uzmanlık,Count(Uzmanlık)
        From PythonJob
        Group By Uzmanlık
        Having Count (Uzmanlık) > 1""")
        deneme1=deneme.fetchall()
        print(deneme1)

        if deneme1:
            messagebox = QMessageBox()
            messagebox.setIcon(QMessageBox.Warning)
            messagebox.setWindowTitle("Kayıtlar Çekildi")
            messagebox.setText(
                "Veriler başarıyla çekildi")
            messagebox.setStandardButtons(QMessageBox.Ok)
            buton_ok = messagebox.button(QMessageBox.Ok)
            buton_ok.setText("Tamam")
            messagebox.exec_()
        else:




            r = requests.get(url)
            soup = BeautifulSoup(r.content,"lxml")
            pages = len(soup.find_all("ul",attrs={"class":"pagination"})[0].find_all("li")) - 2
            totalJobs = 0
            for pageNumber in range(1,pages + 1):
                pageRequest = requests.get("https://www.python.org/jobs/?page=" + str(pageNumber))
                pageSource = BeautifulSoup(pageRequest.content,"lxml")
                jobs = pageSource.find("div",attrs={"class":"row"}).ol.find_all("li")
                # Tüm işleri çektik, döngü ile ilan detaylarını alalım.
                for job in jobs:
                    name = job.h2.find("a").text
                    location = job.find("span",attrs={"class":"listing-location"}).text
                    company = job.find("span",attrs={"class":"listing-company-name"}).br.next.strip()
                    publish_time = job.find("time").text
                    totalJobs += 1
                    print(name,company,location,publish_time,sep="\n")
                    self.im.execute("""INSERT INTO PythonJob(Uzmanlık,Sirket,Ulke,Tarih) VALUES (?,?,?,?)""", [name,company,location,publish_time])
                    self.connect.commit()

                    print("-"*60)

            print("Toplam {} iş bulundu.".format(totalJobs))

    def doldur(self):
        try:
            secili=self.ui.tableWidget.selectedItems()

            self.ui.lineEdit.setText(secili[0].text())
            self.ui.lineEdit_2.setText(secili[1].text())
            self.ui.lineEdit_3.setText(secili[2].text())
            self.ui.lineEdit_4.setText(secili[3].text())

            if secili==[]:
                return

        except Exception as Hata:
            self.ui.statusbar.showMessage("Hata var",2000)
    def table_calistir(self):
        self.ui.tableWidget.clear()
        self.ui.tableWidget.setHorizontalHeaderLabels(('Uzmanlık','Sirket','Ulke','Tarih'))
        self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        #self.ui.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)
        self.ui.tableWidget.setAlternatingRowColors(True)

        pallete = self.ui.tableWidget.palette()
        pallete.setColor(QPalette.Background, QColor(60, 60, 60))
        pallete.setColor(QPalette.AlternateBase, QColor("darkkhaki"))
        pallete.setColor(QPalette.Base, QColor('#bbb'))

        self.ui.tableWidget.setPalette(pallete)

        sec=self.im.execute("SELECT Uzmanlık,Sirket,Ulke,Tarih FROM PythonJob")
        okuma=sec.fetchall()

        self.ui.tableWidget.setRowCount(0)
        for row_number, row_data in enumerate(okuma):
            self.ui.tableWidget.insertRow(row_number)
            for columb_number, data in enumerate(row_data):
                self.ui.tableWidget.setItem(row_number, columb_number, QTableWidgetItem(str(data)))


Kodu denemedin, üstün körü bir cevap olacak şimdiden kusuruma bakmayın. Yine de zorlanırsanız üzerinde çalışırız.

Öncelikle hücreleriniz düzenlenebilir olmalı.

.ItemIsEditable()

özelliği ile bir widget düzenlenebilir hale gelir.

Çifttıklayıp ilgili hücreyi düzenledikten sonra.

Oluşan olay ile tabloyu veri tabanına geri güncelleyebilirsiniz.

Veri tabanınız elimde olmadığından direkt sizin kodunuzu denemedim.

Editing QTableView cells — Allowing users to update the data in a model view (pythonguis.com)

Sanırım bu hücreleri güncelemek için bir örnek, tek şey kalıyor tabloyu geri veri tabanına göndermek.

pandas ile çalışıyor ama mantık aynı.

Açıklamam yetersiz gelir yada özellik kendi kodunuz üzerinde isterseniz ayrıca bakabiliriz.

teşekkür ederim hocam yapıp hemen geri dönüş yapacağım

beceremedim hocam bir türlü olmuyor

Normal olabilir. Bakalım beraber.

from kayit_ara import Ui_MainWindow

Bu kayıt_ara kodu olmadığından kodu çalıştıramadım.

Aynı şekilde, python_job_veritabani.db veri tabanı dosyanız da yok. Yerine uyduruk bir veri tabanı koymayayım.

Bunları eklerseniz, uygun yerlerde değişiklikler yaparak halledebiliriz. Aksi halde kodu tahminen değiştireceğim de düzeltmemiz deneme yanılma ile olur.


# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'kayit_ara.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1154, 768)
        MainWindow.setStyleSheet("")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(240, 20, 891, 601))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(4)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(240, 640, 121, 41))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(8)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(10)
        self.pushButton.setFont(font)
        self.pushButton.setStyleSheet("QPushButton {\n"
"border-radius:10px;\n"
"font: 87 8pt \"Arial Black\";\n"
"    color: rgb(255, 255, 255);\n"
"    background-color: rgb(23, 255, 81);\n"
"    border: 0px solid\n"
"\n"
"}\n"
"QPushButton:hover{\n"
"background-color: rgb(85, 255, 255);\n"
"\n"
"}")
        self.pushButton.setObjectName("pushButton")
        self.formLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.formLayoutWidget_2.setGeometry(QtCore.QRect(10, 120, 221, 141))
        self.formLayoutWidget_2.setObjectName("formLayoutWidget_2")
        self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget_2)
        self.formLayout_2.setContentsMargins(0, 0, 0, 0)
        self.formLayout_2.setObjectName("formLayout_2")
        self.label_32 = QtWidgets.QLabel(self.formLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_32.setFont(font)
        self.label_32.setObjectName("label_32")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_32)
        self.lineEdit = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.lineEdit.setObjectName("lineEdit")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
        self.label_33 = QtWidgets.QLabel(self.formLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_33.setFont(font)
        self.label_33.setObjectName("label_33")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_33)
        self.lineEdit_4 = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_4)
        self.label_34 = QtWidgets.QLabel(self.formLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_34.setFont(font)
        self.label_34.setObjectName("label_34")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_34)
        self.label_35 = QtWidgets.QLabel(self.formLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.label_35.setFont(font)
        self.label_35.setObjectName("label_35")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_35)
        self.lineEdit_3 = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.lineEdit_3)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.formLayoutWidget_2)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(440, 640, 121, 41))
        self.pushButton_2.setStyleSheet("QPushButton {\n"
"border-radius:10px;\n"
"font: 87 8pt \"Arial Black\";\n"
"    color: rgb(255, 255, 255);\n"
"    background-color: rgb(23, 255, 81);\n"
"    border: 0px solid\n"
"\n"
"}\n"
"QPushButton:hover{\n"
"background-color: rgb(85, 255, 255);\n"
"\n"
"}")
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1154, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Uzmanlık"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Sirket"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "Ulke"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "Tarih"))
        self.pushButton.setText(_translate("MainWindow", "Refresh"))
        self.label_32.setText(_translate("MainWindow", "Uzmanlık:"))
        self.label_33.setText(_translate("MainWindow", "Şirket:"))
        self.label_34.setText(_translate("MainWindow", "Ülke:"))
        self.label_35.setText(_translate("MainWindow", "Tarih:"))
        self.pushButton_2.setText(_translate("MainWindow", "Ekle"))




kayıt ara kodları hocam

hocam sahte bir tane uydurun zaten ben veritabanıma sadece gelen verileri kaydettim başka bir şey yapmadım
kodda var hepsi

teşekkür ederim ilginiz için

İlgimde sorun yok ilgilenirim de çalışan bir kod elde edemedik henüz.

Kodunuzun tamamını anlayamıyorum.

İlk verdiğiniz kodda classlar var, ikinci verdiğinizde de diğer classlar var.

Çalışan hiç bir parçasını vermemiş durumdasınız. :slight_smile:

image

Şurada listelenen dört dosya olmadan çalıştıramadım. Çalıştıramayınca da düzeltme aşamasına geçemedim.

Yani kodunuz önce çalıştırıp kavramam ve en uygun sınıfın içine düzeltme ve ilaveleri yapmam gerekir. Belki de sınıfı değiştirmem gerekir.

Bunlar olmadan da yapabilecek yetenekte katılımcılar vardır ama bunlar olmadan ben göremiyorum.

Diğer kısımları da eklerseniz önce kodu bir çalıştırabileyim. Eklerseniz sevinirim kolay gelsin.

hocam size mail üzerinden tüm dosyaları atabilir miyim?