Котаны, приветствую!

Спешу сообщить, что Лаборатория свободных технологих объявляет о старте нового проекта с кодовым названием “Project T”. Он будет использовать таблицы для хранения данных. Как только будет готова первая версия, прикручу SQLite-базу. Исходный код будет открыт. Лицензия GPLv2. Для оффтопика буду распространять в виде exe-файла полноценной программы. Так что все смогут принять участие в её тестировании. Так же я должен буду изучить способы автотетирования с использованием Python’а, на этом проекте. Программу буду использовать в своём сервисе. Так же она послужит портфолио, если буду устраиваться на работу на дядю тестировщиком или кодером, если клюентов у моего сервиса не будет. Потом подумаем вместе, какое название ей придумать с использованием буквы ё - это обязательно.

Есть ли понятие класса в Python’e? Мне сразу проектировать его как ООП или в скриптовом языке это невозможно?

  • xwickedOP
    link
    fedilink
    arrow-up
    0
    ·
    2 months ago
    # ======================================================================
    #   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): Что я упустил?

    • Anoxemian
      link
      fedilink
      arrow-up
      0
      ·
      2 months ago

      Стив Баллмер врывается на сцену и, прыгая в диком угаре, орет: “recursion, recursion, recursion!!!”

      • xwickedOP
        link
        fedilink
        arrow-up
        0
        ·
        2 months ago

        Стив Баллмер врывается на сцену и, прыгая в диком угаре, орет: «recursion, recursion, recursion!!!»

        Да, я походу это понял и теперь пытаюсь эту рекурсию побороть глобальной переменной со счётчиком, но не могу никак её объявить. Во всех местах уже пихал - не видит. Думает что она локальная и всё.

        iCount = iCount + 1
                     ^^^^^^
        UnboundLocalError: cannot access local variable 'iCount' where it is not associated with a value
        
        • Anoxemian
          link
          fedilink
          arrow-up
          0
          ·
          2 months ago

          Тебе надо сделать выход из функции, если значение не менялось.

          • xwickedOP
            link
            fedilink
            arrow-up
            0
            ·
            2 months ago
               def slotCellChanged(self, i, j):
                    iHours = 0
                    iTotal = 1
                    iCostHours = int(self.leCostHours.text())
                    s = self.tableWidget.item(i, iHours).text()
                    if s.isdigit() == True:
                        if int(s) > 15:
                            s = str(15)
                            self.tableWidget.item(i, iHours).setText(s)
                        s = str(int(s) * iCostHours)
                        if self.iCount < 2:
                            self.iCount = self.iCount + 1
                            self.tableWidget.item(i, iTotal).setText(s)
                    else:
                        self.tableWidget.item(i, j).setText("")
            
                def slotCellClicked(self, i, j):
                    self.iCount = 0
                    iHours = 0
                    iTotal = 1
                    if j == iTotal:
                        self.tableWidget.setCurrentCell(i, iHours)
            

            Под конец дня победил глобальной переменной iCount. Обращение через self почему-то. :D