Dodawanie nowego wiersza w table widget klawiszem tab

Dodawanie nowego wiersza w table widget klawiszem tab
TR
  • Rejestracja:ponad 2 lata
  • Ostatnio:5 miesięcy
  • Postów:6
0

Cześć,

stworzyłem okno swojego programu w qt designer. Jest w nim tabela, Kiedy uruchamiam okno do podglądu w qt designer do już stworzonego wiersza mogę wpisywać wartości i przeskakiwać do kolejnej kolumny klawiszem Tab, kiedy przeskakuję do ostatniej kolumny ostatniego wiersza to wraca na początek a ja chciałbym żeby wtedy tworzył się nowy wiersz. Czy tworzenie nowego wiersz kiedy wciskam tab w ostatnim wierszu ostatniej kolumny jest możliwe qt designer czy to już trzeba zaprogramować w pythonie?

W załączniku przesyłam plik .ui

alignNMK_dialog_base.7z

Z góry dziękuję za odpowiedzi

edytowany 2x, ostatnio: Riddle
R7
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:19
1

Fajnie, że umiesz budować takie zaawansowane interfejsami w Qt Designer.
W samym Designer nie ma możliwości wyklikania sobie innego zachowania klawisza "Tab". Możesz tylko modyfikować kolejność tabulacji. Domyślne zachowanie klawisza "Tab" to przemieszczanie się między polami formularza, elementami interfejsu, czy komórkami w przypadku "QTableWidget".
Zaprogramowanie zmiany zachowania klawisza "Tab" na komórkach widget "QTableWidget" nie jest zbyt skomplikowana, ale zrozumienie zależności i technik na tak skomplikowanym i rozbudowany panelu (GUI) jaki podałeś wprowadza sporo zamieszania i zajmuje duuużo czasu.
Początkowo na formatce stworzyły mi się dwie instancje "QTableWidget" o nazwie "table_error_free_coordinates" i nie będę ukrywał, że musiałem skorzystać z pomocy ChatGPT,
żeby zrozumieć różnice oraz zależności między klasą QWidget a klasą "ui" w tym przykładzie o nazwie "Ui_alignNMKDialogBase", obiektami a ich "parents" oraz "children".

do brzegu:

na początku zamieniłem plik
alignNMK_dialog_base.ui na alignNMK_dialog_base.py poleceniem
pyuic6 -x alignNMK_dialog_base.ui -o alignNMK_dialog_base.py

poniżej zamieszczam Listing z docelowym zachowaniem klawisza "Tab" jaki chcesz osiągnąć
enjoy

Kopiuj

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

from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtCore import Qt

class ChangeBehaveKeyTab(QtWidgets.QTableWidget):
    def __init__(self, rows, columns, parent=None, parent_ui=None):
        super().__init__(rows, columns, parent)
        self.setRowCount(rows)
        self.setColumnCount(columns)
        self.parent_ui = parent_ui  
         
    def keyPressEvent(self, event):
        current_row = self.currentRow()
        current_column = self.currentColumn()

        if event.key() == Qt.Key.Key_Tab:
            next_column = (current_column + 1) % self.columnCount()
            next_row = current_row + (current_column + 1) // self.columnCount()
            if next_row < self.rowCount():
                self.setCurrentCell(next_row, next_column)
            else:
                self.parent_ui.add_new_row()
                self.setCurrentCell(next_row, next_column)
            event.accept()
        else:
            super().keyPressEvent(event)

class Ui_alignNMKDialogBase(object):
    def setupUi(self, alignNMKDialogBase):
        alignNMKDialogBase.setObjectName("alignNMKDialogBase")
        alignNMKDialogBase.resize(937, 726)
        self.gridLayout = QtWidgets.QGridLayout(alignNMKDialogBase)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton_calculate = QtWidgets.QPushButton(parent=alignNMKDialogBase)
        self.pushButton_calculate.setObjectName("pushButton_calculate")
        self.gridLayout.addWidget(self.pushButton_calculate, 0, 1, 1, 1)
        self.pushButton_drawing_ellipses = QtWidgets.QPushButton(parent=alignNMKDialogBase)
        self.pushButton_drawing_ellipses.setObjectName("pushButton_drawing_ellipses")
        self.gridLayout.addWidget(self.pushButton_drawing_ellipses, 0, 3, 1, 1)
        self.pushButton_help = QtWidgets.QPushButton(parent=alignNMKDialogBase)
        self.pushButton_help.setObjectName("pushButton_help")
        self.gridLayout.addWidget(self.pushButton_help, 0, 4, 1, 1)
        self.tabWidget = QtWidgets.QTabWidget(parent=alignNMKDialogBase)
        self.tabWidget.setTabPosition(QtWidgets.QTabWidget.TabPosition.West)
        self.tabWidget.setObjectName("tabWidget")        
        self.tab_error_free_coordinates = QtWidgets.QWidget()
        self.tab_error_free_coordinates.setObjectName("tab_error_free_coordinates")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_error_free_coordinates)
        self.gridLayout_3.setObjectName("gridLayout_3")
        
        # self.table_error_free_coordinates = QtWidgets.QTableWidget(parent=self.tab_error_free_coordinates)
        
        self.row_count = 1  
        self.column_count = 3  
        
        self.table_error_free_coordinates = ChangeBehaveKeyTab(rows=self.row_count, columns=self.column_count, parent=alignNMKDialogBase, parent_ui=self)
        self.gridLayout_3.addWidget(self.table_error_free_coordinates, 0, 0, 1, 1)  # Dodajemy widget do układu

        item = QtWidgets.QTableWidgetItem()
        self.table_error_free_coordinates.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_error_free_coordinates.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_error_free_coordinates.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_error_free_coordinates.setHorizontalHeaderItem(2, item)
        
        # self.gridLayout_3.addWidget(self.table_error_free_coordinates, 0, 0, 1, 1)        
        
        self.tabWidget.addTab(self.tab_error_free_coordinates, "")
        self.tab_lengths = QtWidgets.QWidget()
        self.tab_lengths.setObjectName("tab_lengths")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.tab_lengths)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.table_lengths = QtWidgets.QTableWidget(parent=self.tab_lengths)
        self.table_lengths.setObjectName("table_lengths")
        self.table_lengths.setColumnCount(10)
        self.table_lengths.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        item.setText("Id")
        self.table_lengths.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(7, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(8, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_lengths.setHorizontalHeaderItem(9, item)
        self.gridLayout_4.addWidget(self.table_lengths, 0, 0, 1, 1)
        self.tabWidget.addTab(self.tab_lengths, "")
        self.tab_angles = QtWidgets.QWidget()
        self.tab_angles.setObjectName("tab_angles")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_angles)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.table_angles = QtWidgets.QTableWidget(parent=self.tab_angles)
        self.table_angles.setObjectName("table_angles")
        self.table_angles.setColumnCount(11)
        self.table_angles.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(7, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(8, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(9, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_angles.setHorizontalHeaderItem(10, item)
        self.table_angles.horizontalHeader().setMinimumSectionSize(49)
        self.gridLayout_2.addWidget(self.table_angles, 0, 0, 1, 1)
        self.tabWidget.addTab(self.tab_angles, "")
        self.tab_azimuths = QtWidgets.QWidget()
        self.tab_azimuths.setObjectName("tab_azimuths")
        self.gridLayout_5 = QtWidgets.QGridLayout(self.tab_azimuths)
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.tableWidget = QtWidgets.QTableWidget(parent=self.tab_azimuths)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(10)
        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)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(7, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(8, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(9, item)
        self.gridLayout_5.addWidget(self.tableWidget, 0, 0, 1, 1)
        self.tabWidget.addTab(self.tab_azimuths, "")
        self.tab_coordinates_aligned = QtWidgets.QWidget()
        self.tab_coordinates_aligned.setObjectName("tab_coordinates_aligned")
        self.gridLayout_6 = QtWidgets.QGridLayout(self.tab_coordinates_aligned)
        self.gridLayout_6.setObjectName("gridLayout_6")
        self.table_coordinates_aligned = QtWidgets.QTableWidget(parent=self.tab_coordinates_aligned)
        self.table_coordinates_aligned.setObjectName("table_coordinates_aligned")
        self.table_coordinates_aligned.setColumnCount(10)
        self.table_coordinates_aligned.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(7, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(8, item)
        item = QtWidgets.QTableWidgetItem()
        self.table_coordinates_aligned.setHorizontalHeaderItem(9, item)
        self.gridLayout_6.addWidget(self.table_coordinates_aligned, 0, 0, 1, 1)
        self.tabWidget.addTab(self.tab_coordinates_aligned, "")
        self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 6)
        self.pushButton_report = QtWidgets.QPushButton(parent=alignNMKDialogBase)
        self.pushButton_report.setObjectName("pushButton_report")
        self.gridLayout.addWidget(self.pushButton_report, 0, 2, 1, 1)
        self.textBrowser = QtWidgets.QTextBrowser(parent=alignNMKDialogBase)
        self.textBrowser.setMinimumSize(QtCore.QSize(50, 50))
        self.textBrowser.setMaximumSize(QtCore.QSize(16777215, 100))
        self.textBrowser.setObjectName("textBrowser")
        self.gridLayout.addWidget(self.textBrowser, 3, 0, 1, 6)
        self.pushButton_about = QtWidgets.QPushButton(parent=alignNMKDialogBase)
        self.pushButton_about.setObjectName("pushButton_about")
        self.gridLayout.addWidget(self.pushButton_about, 0, 5, 1, 1)
        self.pushButton_load_data = QtWidgets.QPushButton(parent=alignNMKDialogBase)
        self.pushButton_load_data.setObjectName("pushButton_load_data")
        self.gridLayout.addWidget(self.pushButton_load_data, 0, 0, 1, 1)
        self.label = QtWidgets.QLabel(parent=alignNMKDialogBase)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 2, 0, 1, 1)

        self.retranslateUi(alignNMKDialogBase)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(alignNMKDialogBase)
    
    def add_new_row(self):
        self.table_error_free_coordinates.insertRow(self.row_count)
        for col in range(self.table_error_free_coordinates.columnCount()):
            self.table_error_free_coordinates.setItem(self.row_count, col, QtWidgets.QTableWidgetItem())

        self.row_count += 1
        
    def retranslateUi(self, alignNMKDialogBase):
        _translate = QtCore.QCoreApplication.translate
        alignNMKDialogBase.setWindowTitle(_translate("alignNMKDialogBase", "Wyrównanie sieci płaskiej - MNK"))
        self.pushButton_calculate.setText(_translate("alignNMKDialogBase", "Oblicz"))
        self.pushButton_drawing_ellipses.setText(_translate("alignNMKDialogBase", "Szkic elips błędów"))
        self.pushButton_help.setText(_translate("alignNMKDialogBase", "Pomoc"))
        item = self.table_error_free_coordinates.verticalHeaderItem(0)
        item.setText(_translate("alignNMKDialogBase", "1"))
        item = self.table_error_free_coordinates.horizontalHeaderItem(0)
        item.setText(_translate("alignNMKDialogBase", "Id"))
        item = self.table_error_free_coordinates.horizontalHeaderItem(1)
        item.setText(_translate("alignNMKDialogBase", "X"))
        item = self.table_error_free_coordinates.horizontalHeaderItem(2)
        item.setText(_translate("alignNMKDialogBase", "Y"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_error_free_coordinates), _translate("alignNMKDialogBase", "Współrzędne bezbłędne"))
        item = self.table_lengths.horizontalHeaderItem(1)
        item.setText(_translate("alignNMKDialogBase", "Od"))
        item = self.table_lengths.horizontalHeaderItem(2)
        item.setText(_translate("alignNMKDialogBase", "Do"))
        item = self.table_lengths.horizontalHeaderItem(3)
        item.setText(_translate("alignNMKDialogBase", "D"))
        item = self.table_lengths.horizontalHeaderItem(4)
        item.setText(_translate("alignNMKDialogBase", "md"))
        item = self.table_lengths.horizontalHeaderItem(5)
        item.setText(_translate("alignNMKDialogBase", "D wyrównane"))
        item = self.table_lengths.horizontalHeaderItem(6)
        item.setText(_translate("alignNMKDialogBase", "mD wyrównane"))
        item = self.table_lengths.horizontalHeaderItem(7)
        item.setText(_translate("alignNMKDialogBase", "v"))
        item = self.table_lengths.horizontalHeaderItem(8)
        item.setText(_translate("alignNMKDialogBase", "mv"))
        item = self.table_lengths.horizontalHeaderItem(9)
        item.setText(_translate("alignNMKDialogBase", "v/mv"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_lengths), _translate("alignNMKDialogBase", "Długości"))
        item = self.table_angles.horizontalHeaderItem(0)
        item.setText(_translate("alignNMKDialogBase", "Id"))
        item = self.table_angles.horizontalHeaderItem(1)
        item.setText(_translate("alignNMKDialogBase", "L"))
        item = self.table_angles.horizontalHeaderItem(2)
        item.setText(_translate("alignNMKDialogBase", "C"))
        item = self.table_angles.horizontalHeaderItem(3)
        item.setText(_translate("alignNMKDialogBase", "P"))
        item = self.table_angles.horizontalHeaderItem(4)
        item.setText(_translate("alignNMKDialogBase", "K"))
        item = self.table_angles.horizontalHeaderItem(5)
        item.setText(_translate("alignNMKDialogBase", "mk"))
        item = self.table_angles.horizontalHeaderItem(6)
        item.setText(_translate("alignNMKDialogBase", "K wyrównany"))
        item = self.table_angles.horizontalHeaderItem(7)
        item.setText(_translate("alignNMKDialogBase", "mK wyrównany"))
        item = self.table_angles.horizontalHeaderItem(8)
        item.setText(_translate("alignNMKDialogBase", "v"))
        item = self.table_angles.horizontalHeaderItem(9)
        item.setText(_translate("alignNMKDialogBase", "mv"))
        item = self.table_angles.horizontalHeaderItem(10)
        item.setText(_translate("alignNMKDialogBase", "v/mv"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_angles), _translate("alignNMKDialogBase", "Kąty poziome"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("alignNMKDialogBase", "Id"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("alignNMKDialogBase", "Od"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("alignNMKDialogBase", "Do"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("alignNMKDialogBase", "Az"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("alignNMKDialogBase", "mAz"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("alignNMKDialogBase", "Az wyrównany"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("alignNMKDialogBase", "mAz wyrównany"))
        item = self.tableWidget.horizontalHeaderItem(7)
        item.setText(_translate("alignNMKDialogBase", "v"))
        item = self.tableWidget.horizontalHeaderItem(8)
        item.setText(_translate("alignNMKDialogBase", "mv"))
        item = self.tableWidget.horizontalHeaderItem(9)
        item.setText(_translate("alignNMKDialogBase", "v/mv"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_azimuths), _translate("alignNMKDialogBase", "Azymuty"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(0)
        item.setText(_translate("alignNMKDialogBase", "Id"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(1)
        item.setText(_translate("alignNMKDialogBase", "Numer"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(2)
        item.setText(_translate("alignNMKDialogBase", "X wyrównane"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(3)
        item.setText(_translate("alignNMKDialogBase", "Y wyrównane"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(4)
        item.setText(_translate("alignNMKDialogBase", "mX"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(5)
        item.setText(_translate("alignNMKDialogBase", "mY"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(6)
        item.setText(_translate("alignNMKDialogBase", "mP"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(7)
        item.setText(_translate("alignNMKDialogBase", "a elipsy"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(8)
        item.setText(_translate("alignNMKDialogBase", "b elipsy"))
        item = self.table_coordinates_aligned.horizontalHeaderItem(9)
        item.setText(_translate("alignNMKDialogBase", "Az elipsy"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_coordinates_aligned), _translate("alignNMKDialogBase", "Współrzędne wyrównane"))
        self.pushButton_report.setText(_translate("alignNMKDialogBase", "Raport pdf"))
        self.textBrowser.setHtml(_translate("alignNMKDialogBase", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Noto Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Tu będą komunikaty z programu</p></body></html>"))
        self.pushButton_about.setText(_translate("alignNMKDialogBase", "O programie"))
        self.pushButton_load_data.setText(_translate("alignNMKDialogBase", "Wczytaj dane"))
        self.label.setText(_translate("alignNMKDialogBase", "Komunikaty programu:"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    alignNMKDialogBase = QtWidgets.QDialog()
    ui = Ui_alignNMKDialogBase()
    ui.setupUi(alignNMKDialogBase)
    alignNMKDialogBase.show()
    sys.exit(app.exec())

TR
  • Rejestracja:ponad 2 lata
  • Ostatnio:5 miesięcy
  • Postów:6
0

@R7YM: Dzięki za pomoc.

R7
Proszę bardzo

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.