Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/141: Рейтинг темы: голосов - 141, средняя оценка - 4.58
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521

Pyqt. Класс QTableView

23.12.2018, 18:01. Показов 29513. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Напишите, пожалуйста, примеры использования QTableview: указание количества строк/столбцов, заголовки столбцов, заполнение значениями. Вроде надо с помощью QAbstractItemModel. Гуглится в основном про QTableWidget.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2018, 18:01
Ответы с готовыми решениями:

PyQt, редактируемый QTableView и автодобавление строк
Есть таблица, представляется классами myModel и myView. Не давно добавил возможность редактирования, с существующими значениями все хорошо,...

PYQT Вставить в ячейку QTableView произвольный виджет
Здравствуйте. Никак не могу понять, как вставить свой виджет отображения в ячейку QTableView. Есть назначение делегатов, но это...

Разница между PyQT 5 и PyQT 6
Добрый день, форумчане. Прошел тут курс всеми вами любимого автора, познакомился с GUI TKinter, и по вашим советам решил освоить PyQT. ...

60
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
24.12.2018, 16:23
qtablewidget = qtableview + qstandarditemmodel
http://itnotesblog.ru/note.php?id=159
http://easy-qt.blogspot.com/20... eview.html

Добавлено через 2 часа 5 минут
rowСount, columnCount , data - относится к модели, а не к вьюхе
если хотите на Qt делать - читайте примеры по Qt - их очень много
для вашего случая https://evileg.com/ru/post/158/
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
25.12.2018, 18:05  [ТС]
Спасибо. Только все примеры на c++.

Добавлено через 1 минуту
Ну хотя на питоне идея примерно та же, только синтаксис отличается.
0
Эксперт Python
 Аватар для dondublon
4648 / 2068 / 366
Регистрация: 17.03.2012
Сообщений: 10,168
Записей в блоге: 6
26.12.2018, 16:33
Для ознакомления рекомендую всем https://habr.com/post/171443/ .
4
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
26.12.2018, 17:53
необходимый минимум знаний
2
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
26.12.2018, 18:50  [ТС]
А скажите, пожалуйста, почему из-за этой строчки
Python
1
NpTable = QtWidgets.QTableView()
не появляется окошко? И пишет Process finished with exit code -1073740791 (0xC0000409). Если ее закомментить, окошко появляется. И exit code = 0. Модуль QtWidjets импортировала. Но он черный. А остальные импортированные модули подсвечены серым. Надо, видимо, передать в скобочках parent. Не знаю, какую переменную. Брала из книжки. Там пустые скобки. По смыслу туда надо передать экземпляр класса окна.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
26.12.2018, 19:33
покажите весь код
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
26.12.2018, 19:47  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import sys
# Импорт numpy
import numpy
# Импорт интерфейса
from test import *
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
# Массив значений
mass = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
# Создание таблицы
NpTable = QtWidgets.QTableView()
 
# Окно
class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
        #Событие нажатия на кнопки
        self.ui.SaveArrBttn.clicked.connect(self.SaveArrayInFile)
 
    # Функции, выполняющиеся при нажатии на кнопки
    def SaveArrayInFile(self):            # сохранение массива в текстовый файл
        pass
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.setWindowTitle("Таблица и график") #Заголовок окна
    # Надпись на кнопке
    myapp.ui.SaveArrBttn.setText("Сохранить массив в файл")
  
    # Размеры окна и кнопки
    myapp.setFixedWidth(900)
    myapp.ui.SaveArrBttn.setFixedWidth(250)
    myapp.show()
    sys.exit(app.exec_())
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
26.12.2018, 22:20
Bash
1
2
QWidget: Must construct a QApplication before a QWidget
Abort trap: 6
вы создаете экземпляр класса вне QApplication так нельзя
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys
# Импорт numpy
import numpy
# Импорт интерфейса
from PyQt5 import QtCore, QtGui, QtWidgets
 
# Массив значений
mass = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    NpTable = QtWidgets.QTableView() 
 
    NpTable.show()
    sys.exit(app.exec_())
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
27.12.2018, 04:25  [ТС]
Понятно. Спасибо!
0
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
28.12.2018, 17:56  [ТС]
Посмотрите еще, пожалуйста. Пока не очень получается. И дебажить в pycharm не получается.

Беру пример из книжки и адаптирую под свою задачу. Концепцию "модель-представление" поняла более-менее. Заполняю данными модель NPTableModel. Почему-то когда запускаю, у таблицы только заголовки выводятся. Пыталась посмотреть значение объекта item1 в консоли. Это просто его адрес.

item1
<PyQt5.QtGui.QStandardItem object at 0x07023DF0>




Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import sys
# Импорт numpy
import numpy
# Импорт интерфейса
from test import *
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
# Массив значений
mass = numpy.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]], float)
 
# Окно
class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
   
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.setWindowTitle("Таблица") #Заголовок окна
    # Создание таблицы
    NpTable = QtWidgets.QTableView(parent=myapp)
    # Создание модели для таблицы
    NpTableModel = QtGui.QStandardItemModel(parent=myapp)
    # Заполнение модели
    for row in range(0, 3):
        item1 = QtGui.QStandardItem(mass[row, 0])
        item2 = QtGui.QStandardItem(mass[row, 1])
        item3 = QtGui.QStandardItem(mass[row, 2])
        item4 = QtGui.QStandardItem(mass[row, 3])
        item5 = QtGui.QStandardItem(mass[row, 4])
        NpTableModel.appendRow([item1, item2, item3, item4, item5])
    NpTableModel.setHorizontalHeaderLabels(['Column1', 'Column2', 'Columln3', 'Column4', 'Column5'])
    # Передача заполненной модели в таблицу
    NpTable.setModel(NpTableModel)
 
    # Размеры окна и таблицы
    myapp.setFixedWidth(900)
    NpTable.setFixedWidth(520)
    NpTable.setFixedHeight(150)
    NpTable.show()
    myapp.show()
    sys.exit(app.exec_())
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
28.12.2018, 20:34
в Qt все завязано на классы и сигнал-слот
темплейт такой
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QGridLayout, QPushButton
from PyQt5.QtGui import QStandardItemModel, QStandardItem
 
class Table(QWidget):
    def __init__(self,parent=None):
        super().__init__()
        self.model = QStandardItemModel()
        self.table = QTableView()
        self.table.setModel(self.model)
        self.btnLoad = QPushButton("load")
        self.btnLoad.clicked.connect(self.load_data)
        self.grid = QGridLayout(self)
        self.grid.addWidget(self.table,0,0,4,4)
        self.grid.addWidget(self.btnLoad,4,0,1,1)
        
    def load_data(self):
        l = [[i + j  for i in range(3)] for j in range(4)]
        self.model.setRowCount(4)
        self.model.setColumnCount(3)
        for i in range(4):
            for j in range(3):
                item = QStandardItem(str(l[i][j]))
                self.model.setItem(i,j,item)
        
        
        
if __name__=="__main__":
    app = QApplication([])
    w = Table()
    w.show()
    app.exec_()
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
29.12.2018, 13:12  [ТС]
Спасибо!
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
29.12.2018, 16:43
немного развил тему
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QGridLayout, QPushButton, \
QTreeView, QListView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
 
class Table(QWidget):
    def __init__(self,parent=None):
        super().__init__()
        self.model = QStandardItemModel()
        self.table = QTableView()
        self.table.setModel(self.model)
        self.table.horizontalHeader().setSectionResizeMode(1)
        self.btnLoad = QPushButton("Load")
        self.btnClear = QPushButton("Clear")
        self.btnGet = QPushButton('Get')
        self.btnLoad.clicked.connect(self.load_data)
        self.btnClear.clicked.connect(self.on_clear)
        self.btnGet.clicked.connect(self.get_data)
        grid = QGridLayout(self)
        grid.setContentsMargins(1,1,1,1)
        grid.addWidget(self.table,0,0,4,4)
        grid.addWidget(self.btnLoad,4,0,1,1)
        grid.addWidget(self.btnClear,4,1,1,1)
        grid.addWidget(self.btnGet,4,3,1,1)
        self.rows = 2
        self.cols = 3
        
    def load_data(self):
        self.model.setRowCount(self.rows)
        self.model.setColumnCount(self.cols)
        for row in range(self.rows):
            for col in range(self.cols):
                item = QStandardItem(str(row)+':'+str(col))
                self.model.setItem(row,col,item)
        self.rows += 1
        self.cols += 1
            
    def on_clear(self):
        self.model.clear()
        self.rows = 2
        self.cols = 3
    
    def get_data(self):
        rows = self.model.rowCount()
        cols = self.model.columnCount()
        out = [[self.model.item(i,j).text() for j in range(cols)] for i in range(rows)]
        print(out)
            
            
        
if __name__=="__main__":
    app = QApplication([])
    w = Table()
    w.show()
    app.exec_()
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
29.12.2018, 19:57  [ТС]
vic5710, круто у Вас получается, спасибо! Просто тут много непонятного мне кода. Хочу сама научиться. Я всё-таки не понимаю, почему мой исходный код не работал. И мне нужно, чтобы таблица заполнялась значениями из numpy массива. Дальше мне нужно будет, чтобы значения одного из столбцов пересчитывались через значения другого, чтобы по двум выделенным строился график, чтобы один из столбцов заполнялся из списка (с использованием делегатов) и тд. А я всё еще не совсем понимаю, как таблицу заполнить.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
29.12.2018, 21:34

Не по теме:

я в Qt пишу со времен Qt3, так что лишних движений не делаю :senor:
в питоне у меня внучка пишет
мне проще показать как надо чем объяснить как не надо


таблица - отображений модели данных. то есть данные -> преобразование данных (по дефолту все в текст)-> модель -> вьюха
извлечение данных - модель -> преобразование данных (по дефолту все текст) -> данные
вам надо работать с данными, а в модель тока заносить, ну еще можно во вьюхе редактировать
типа так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import numpy as np
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QGridLayout, QPushButton, \
QTreeView, QListView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
 
mass = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
 
class Table(QWidget):
    def __init__(self,data=None,parent = None):
        super().__init__()
        self.model = QStandardItemModel()
        self.table = QTableView()
        self.table.setModel(self.model)
        self.table.horizontalHeader().setSectionResizeMode(1)
        self.btnLoad = QPushButton("Load")
        self.btnCalc = QPushButton("Calc")
        self.btnGet = QPushButton('Get')
        self.btnLoad.clicked.connect(self.load_data)
        self.btnCalc.clicked.connect(self.calc)
        self.btnGet.clicked.connect(self.get_data)
        grid = QGridLayout(self)
        grid.setContentsMargins(1,1,1,1)
        grid.addWidget(self.table,0,0,4,4)
        grid.addWidget(self.btnLoad,4,0,1,1)
        grid.addWidget(self.btnCalc,4,1,1,1)
        grid.addWidget(self.btnGet,4,3,1,1)
        self.data = data
        
    def load_data(self):
        rows = len(self.data)
        cols = len(self.data[0])
        for row in range(rows):
            for col in range(cols):
                item = QStandardItem(str(self.data[row][col]))
                self.model.setItem(row,col,item)
            
    def calc(self):
        for i in range(len(self.data[0])):
            self.data[0][i] *= 100
            self.load_data()
            
    
    def get_data(self):
        rows = self.model.rowCount()
        cols = self.model.columnCount()
        out = [[self.model.item(i,j).text() for j in range(cols)] for i in range(rows)]
        print(out)
            
                
if __name__=="__main__":
    app = QApplication([])
    w = Table(mass)
    w.show()
    app.exec_()
Добавлено через 8 минут
Цитата Сообщение от Simply me Посмотреть сообщение
Дальше мне нужно будет, чтобы значения одного из столбцов пересчитывались через значения другого, чтобы по двум выделенным строился график, чтобы один из столбцов заполнялся из списка (с использованием делегатов) и тд. А я всё еще не совсем понимаю, как таблицу заполнить.
все реально я QTabWidget рекомендую для начала со вкладками
1
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
30.12.2018, 10:06  [ТС]
Спасибо, вроде понятнее)
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
30.12.2018, 12:32
Цитата Сообщение от Simply me Посмотреть сообщение
А я всё еще не совсем понимаю, как таблицу заполнить.
я вроде понял где вас клинит
Python
1
2
3
4
5
6
7
8
9
    def load_data(self):
        self.model.clear()
        rows = len(self.data)
        cols = len(self.data[0])
        for row in range(rows):
            for col in range(cols):
                item = QStandardItem() #1
                item.setText(str(round(self.data[row][col],3))) #2
                self.model.setItem(row,col,item) #3
1
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,761
02.01.2019, 05:35
чота в новый год не спалось, наваял прогу для работы с numpy,

Не по теме:

правда был слегка нетрезв


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import numpy as np
 
from PyQt5.QtWidgets import (QApplication, QTableView, QTreeView, 
QMainWindow, QWidget, QGridLayout, QPushButton,QMenu)
from PyQt5.QtCore import (Qt,QAbstractTableModel,QModelIndex)
 
         
class NpModel(QAbstractTableModel):
    def __init__(self, data = np.array([[]])):
        super().__init__()
        self.npdata = data
        
    def rowCount(self,index=QModelIndex()):
        return len(self.npdata)
        
    def columnCount(self,index=QModelIndex()):
        return len(self.npdata[0])
    
    def data(self,index,role):
        if not index.isValid() or role != Qt.DisplayRole: 
            return None
        val = self.npdata[index.row()][index.column()]
        return str(round(val,4))
    
    def headerData(self,section,orientation,role):
        if role != Qt.DisplayRole: return None
        if orientation == Qt.Vertical:
            return 'Строка ' + str(section)
        else: return 'Столбец ' + str(section)
 
    def set(self,arr=np.array([[]])):
        self.beginResetModel()
        self.npdata = arr
        self.endResetModel()
        self.layoutChanged.emit()
    
    def get(self):
        return self.npdata
 
class NpTable(QMainWindow):
    def __init__(self,data=np.array([[]]),parent = None):
        super().__init__()
        self.model = NpModel()
        self.view = QTableView()
        self.view.setModel(self.model)
        self.view.horizontalHeader().setSectionResizeMode(1)
        self.btnLoad = QPushButton("Reload")
        self.btnCalc = QPushButton("Calc")
        self.btnGet = QPushButton('Get')
        self.btnLoad.clicked.connect(self.reload)
        self.btnCalc.clicked.connect(self.calc)
        self.btnGet.clicked.connect(self.get_data)
        wgt = QWidget()
        grid = QGridLayout(wgt)
        grid.setContentsMargins(0,0,0,0)
        grid.addWidget(self.view,0,0,4,4)
        grid.addWidget(self.btnLoad,4,0,1,1)
        grid.addWidget(self.btnCalc,4,1,1,1)
        grid.addWidget(self.btnGet,4,3,1,1)
        self.setCentralWidget(wgt)
        self.load(data)
        
    def reload(self):
        self.model.set(self.data.copy())
        
    def load(self,data=np.array([[]])):
        self.data = data
        self.model.set(data.copy())
        
    def calc(self):
        rows = self.model.rowCount()
        cols = self.model.columnCount()
        for i in range(rows):
            for j in range(cols):
                self.model.npdata[i][j] /=  (j + 2)
        self.model.layoutChanged.emit()
    
    def get_data(self):
        print(repr(self.model.get()))
        
    def contextMenuEvent(self,event):
        indexes = [(i.row(),i.column()) for i in self.view.selectionModel().selectedIndexes()]
        self.statusBar().showMessage(str(indexes))
        mnu = QMenu()
        mnu.addAction('x10').setObjectName('calc10')
        mnu.addAction('x100').setObjectName('calc100')
        pos =  self.view.mapToGlobal(event.pos())
        ret = mnu.exec_(pos)
        if ret:
            num = 0 
            obj = ret.objectName()
            if obj == 'calc10': num = 10
            elif obj == 'calc100': num = 100
            if num:
                for ind in indexes: self.model.npdata[ind] *= num
        index = self.model.index(-1,-1)
        self.view.setCurrentIndex(index)
        self.model.layoutChanged.emit()
        self.statusBar().showMessage('')
    
 
mass = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]], float)
 
if __name__=="__main__":
    app = QApplication([])
    w = NpTable()
    w.load(mass)
    w.resize(600,400)
    w.move(0,0)
    w.show()
    app.exec_()
2
 Аватар для Simply me
244 / 37 / 8
Регистрация: 05.05.2012
Сообщений: 521
02.01.2019, 07:07  [ТС]
Спасибо! С наступившим!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.01.2019, 07:07
Помогаю со студенческими работами здесь

Из QT в PyQt
Здравствуйте, подскажите правильно ли у меня получился перевод из QT в PyQt? Интересует именно выполнение класса QCoreApplication и...

PyQt, Qt и ScrollArea
Доброй ночи. В этот раз кода не будет, так как клин. Из русскоязычных мануалов по PyQt только Прохоренок, которого все хаят (а...

PyQt + PyCharm
Как подключить PyQT5 к pycharm 4.5.3 ? python 3.4

PyQt и Spyder 3
Доброго времени суток! Возyикает проблема после установки PyQt - перестает запускаться Spyder 3, никаких ошибок, ничего. Запускаешь IDE,...

Paint pyqt
Добрый вечер, помогите разобраться с кодом я в Python (pyqt, Desinger) новичок. Можете обяснить по подробнее с &quot;Class Canvas&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru