LINUXTALKS.CO

История изменений

Исправление xwicked, (текущая версия) :

# ======================================================================
#   main.py - Главный файл программы.
#   Является частью программы Project T, распространяемой под
#   Стандартной общественной лицензией, версии 2 (GNU GPL v2).
# ======================================================================
#   Copyleft 2026 by Lab Free Technologies <[email protected]>
# ==============================================================================
#   Copyleft 2026  Лаборатория свободных технологий <[email protected]>
# ==============================================================================
#

# from PyQt6 import QtWidgets, QtCore
from PyQt6.QtCore import QCoreApplication
from PyQt6.QtCore import QDate
from PyQt6.QtCore import QTime
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QDateEdit
from PyQt6.QtWidgets import QTimeEdit
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QTableWidgetItem
import sys, os, time, mainwindow_ui, TAboutProgram_ui

app = QApplication(sys.argv)

class uiAbout (QWidget, TAboutProgram_ui.Ui_TAboutProgram):
    def __init__(self):
        QWidget.__init__(self)
        self.setupUi(self);

wAbout = uiAbout()

class uiMain (QMainWindow, mainwindow_ui.Ui_MainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setupUi(self);

    def slotQuit(self):
        QCoreApplication.exit()

    def slotAbout(self):
        wAbout.show()

    def slotSave(self):
        arr = [],[]
        iHours = 0
        iTotal = 1
        with open("table.txt", "wt") as fTable:
            for i in range(self.tableWidget.rowCount()):
                arr[iHours].append(self.tableWidget.item(i,iHours).text())
                print(arr[iHours][i])
                print(arr[iHours][i], file = fTable)
            for i in range(self.tableWidget.rowCount()):
                arr[iTotal].append(self.tableWidget.item(i,iTotal).text())
                print(arr[iTotal][i])
                print(arr[iTotal][i], file = fTable)
                
    def slotOpen(self):
        arr = [],[]
        iHours = 0
        iTotal = 1
        vFile = None
        with open("table.txt", "rt") as fTable:
            for i in range(self.tableWidget.rowCount()):
                arr[iHours].append(fTable.readline())
                self.tableWidget.item(i,iHours).setText(arr[iHours][i].strip())
                #print(arr[iHours][i])
            for i in range(self.tableWidget.rowCount()):
                arr[iTotal].append(fTable.readline())
                self.tableWidget.item(i,iTotal).setText(arr[iTotal][i].strip())
                #print(arr[iTotal][i])

    def slotCellChanged(self, i, j):
        iCostHours = int(self.leCostHours.text())
        iTotal = 1
        s = self.tableWidget.item(i, j).text()
        if s.isdigit() == True:
            if int(s) > 15:
                s = str(15)
                self.tableWidget.item(i, j).setText(s)
            s = str(int(s) * iCostHours)
            print(s)
            print(i)
            print(iTotal)
            print(j)
            #self.tableWidget.item(i, j).setText(s)#эта строка вызыывет сегфолт :(
        else:
            self.tableWidget.item(i, j).setText("")

    def slotCellClicked(self, i, j):
        iHours = 0
        iTotal = 1
        if j == iTotal:
            self.tableWidget.setCurrentCell(i, iHours)

wMain = uiMain()
wMain.show()
wMain.tableWidget.resizeColumnsToContents()
wMain.tableWidget.resizeRowsToContents()

for i in range(wMain.tableWidget.rowCount()):
    for j in range(wMain.tableWidget.columnCount()):
        wMain.tableWidget.setItem(i,j, QTableWidgetItem())

currentTime = time.localtime()
print(currentTime.tm_year, ":", currentTime.tm_mon, ":", currentTime.tm_mday)
wMain.dateEdit.setDate(QDate(currentTime.tm_year,currentTime.tm_mon,currentTime.tm_mday))
print(currentTime.tm_hour, ":", currentTime.tm_min, ":", currentTime.tm_sec)
wMain.timeEdit.setTime(QTime(currentTime.tm_hour,currentTime.tm_min))
sys.exit(app.exec())

Пытаюсь обработать изменение ячейки таблицы и почему-то вылетает сегфолт в slotCellChanged(self, i, j): Что я упустил?

Исходная версия xwicked, :

# ======================================================================
#   main.py - Главный файл программы.
#   Является частью программы Project T, распространяемой под
#   Стандартной общественной лицензией, версии 2 (GNU GPL v2).
# ======================================================================
#   Copyleft 2026 by Lab Free Technologies <[email protected]>
# ==============================================================================
#   Copyleft 2026  Лаборатория свободных технологий <[email protected]>
# ==============================================================================
#

# from PyQt6 import QtWidgets, QtCore
from PyQt6.QtCore import QCoreApplication
from PyQt6.QtCore import QDate
from PyQt6.QtCore import QTime
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QDateEdit
from PyQt6.QtWidgets import QTimeEdit
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QTableWidgetItem
import sys, os, time, mainwindow_ui, TAboutProgram_ui

app = QApplication(sys.argv)

class uiAbout (QWidget, TAboutProgram_ui.Ui_TAboutProgram):
    def __init__(self):
        QWidget.__init__(self)
        self.setupUi(self);

wAbout = uiAbout()

class uiMain (QMainWindow, mainwindow_ui.Ui_MainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setupUi(self);

    def slotQuit(self):
        QCoreApplication.exit()

    def slotAbout(self):
        wAbout.show()

    def slotSave(self):
        arr = [],[]
        iHours = 0
        iTotal = 1
        with open("table.txt", "wt") as fTable:
            for i in range(self.tableWidget.rowCount()):
                arr[iHours].append(self.tableWidget.item(i,iHours).text())
                print(arr[iHours][i])
                print(arr[iHours][i], file = fTable)
            for i in range(self.tableWidget.rowCount()):
                arr[iTotal].append(self.tableWidget.item(i,iTotal).text())
                print(arr[iTotal][i])
                print(arr[iTotal][i], file = fTable)
                
    def slotOpen(self):
        arr = [],[]
        iHours = 0
        iTotal = 1
        vFile = None
        with open("table.txt", "rt") as fTable:
            for i in range(self.tableWidget.rowCount()):
                arr[iHours].append(fTable.readline())
                self.tableWidget.item(i,iHours).setText(arr[iHours][i].strip())
                #print(arr[iHours][i])
            for i in range(self.tableWidget.rowCount()):
                arr[iTotal].append(fTable.readline())
                self.tableWidget.item(i,iTotal).setText(arr[iTotal][i].strip())
                #print(arr[iTotal][i])

    def slotCellChanged(self, i, j):
        iCostHours = int(self.leCostHours.text())
        iTotal = 1
        s = self.tableWidget.item(i, j).text()
        if s.isdigit() == True:
            if int(s) > 15:
                s = str(15)
                self.tableWidget.item(i, j).setText(s)
            s = str(int(s) * iCostHours)
            print(s)
            print(i)
            print(iTotal)
            print(j)
            #self.tableWidget.item(i, j).setText(s)#эта строка вызыывет сегфолт :(
        else:
            self.tableWidget.item(i, j).setText("")

    def slotCellClicked(self, i, j):
        iHours = 0
        iTotal = 1
        if j == iTotal:
            self.tableWidget.setCurrentCell(i, iHours)

wMain = uiMain()
wMain.show()
wMain.tableWidget.resizeColumnsToContents()
wMain.tableWidget.resizeRowsToContents()

for i in range(wMain.tableWidget.rowCount()):
    for j in range(wMain.tableWidget.columnCount()):
        wMain.tableWidget.setItem(i,j, QTableWidgetItem())

currentTime = time.localtime()
print(currentTime.tm_year, ":", currentTime.tm_mon, ":", currentTime.tm_mday)
wMain.dateEdit.setDate(QDate(currentTime.tm_year,currentTime.tm_mon,currentTime.tm_mday))
print(currentTime.tm_hour, ":", currentTime.tm_min, ":", currentTime.tm_sec)
wMain.timeEdit.setTime(QTime(currentTime.tm_hour,currentTime.tm_min))
sys.exit(app.exec())

Пытаюсь обработать изменение ячейки таблицы и почему-то вылетает сефйолт в slotCellChanged(self, i, j): Что я упустил?