class widget(QWidget): def __init__(self, data): QWidget.__init__(self) self.model = CustomTableModel(data) self.table_view = QTableView() self.table_view.setModel(self.model) self.horizontal_header = self.table_view.horizontalHeader() self.vertical_header = self.table_view.verticalHeader() self.horizontal_header.setSectionResizeMode( QHeaderView.ResizeToContents) self.vertical_header.setSectionResizeMode(QHeaderView.ResizeToContents) self.horizontal_header.setStretchLastSection(True) self.main_layout = QHBoxLayout() size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) size.setHorizontalStretch(1) self.table_view.setSizePolicy(size) self.main_layout.addWidget(self.table_view) self.setLayout(self.main_layout)
class Widget(QWidget): def __init__(self, data): QWidget.__init__(self) #Getting the Model self.model = CustomTableModel(data) #Creating a QTableView self.table_view = QTableView() self.table_view.setModel(self.model) #QTableView Headers self.horizontal_header = self.table_view.horizontalHeader() self.vertical_header = self.table_view.verticalHeader() self.horizontal_header.setSectionResizeMode( QHeaderView.ResizeToContents) self.vertical_header.setSectionResizeMode(QHeaderView.ResizeToContents) self.horizontal_header.setStretchLastSection(True) #QWidget Layout self.main_layout = QHBoxLayout() size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) #Left Layout size.setHorizontalStretch(1) self.table_view.setSizePolicy(size) self.main_layout.addWidget(self.table_view) # Set layout to QWidget self.setLayout(self.main_layout)
def createDomainTable(self, domainmodel): domainTable = QTableView() domainTable.setModel(domainmodel) domainTable.setItemDelegate(DomainDelegate(domainTable)) domainTable.verticalHeader().setVisible(False) domainTable.resizeColumnsToContents() domainTable.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) domainTable.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) return domainTable
class nDisplayMonitorUI(QtWidgets.QWidget): def __init__(self, parent, monitor): QtWidgets.QWidget.__init__(self, parent) # create buttons # self.btnForceFocus = QPushButton("Force Focus") self.btnForceFocus.setToolTip("Forces focus on the nDisplay window") self.btnForceFocus.clicked.connect(monitor.btnForceFocus_clicked) self.btnFixExeFlags = QPushButton("Fix ExeFlags") self.btnFixExeFlags.setToolTip("Disables fullscreen optimizations on the executable.") self.btnFixExeFlags.clicked.connect(monitor.btnFixExeFlags_clicked) self.btnSoftKill = QPushButton("Soft Kill") self.btnSoftKill.setToolTip( "Sends a message to the master node to terminate the session.\n" "This is preferable to the normal kill button because it ensures the nodes exit properly") self.btnSoftKill.clicked.connect(monitor.btnSoftKill_clicked) # arrange them in a horizontal layout layout_buttons = QHBoxLayout() layout_buttons.addStretch() layout_buttons.addWidget(self.btnForceFocus) layout_buttons.addWidget(self.btnFixExeFlags) layout_buttons.addWidget(self.btnSoftKill) # create table # self.tableview = QTableView() self.tableview.setModel(monitor) # the monitor is the model of this tableview. size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) size.setHorizontalStretch(1) self.tableview.setSizePolicy(size) # configure resize modes on headers self.tableview.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) self.tableview.horizontalHeader().setStretchLastSection(False) self.tableview.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) self.tableview.verticalHeader().setVisible(False) # create layout # layout = QVBoxLayout() layout.addLayout(layout_buttons) layout.addWidget(self.tableview) self.setLayout(layout)
class Widget(QWidget): def __init__(self, data): QWidget.__init__(self) # Getting the Model self.model = CustomTableModel(data) # Creating a QTableView self.table_view = QTableView() self.table_view.setModel(self.model) # QTableView Headers self.horizontal_header = self.table_view.horizontalHeader() self.vertical_header = self.table_view.verticalHeader() self.horizontal_header.setSectionResizeMode( QHeaderView.ResizeToContents) self.vertical_header.setSectionResizeMode(QHeaderView.ResizeToContents) self.horizontal_header.setStretchLastSection(True) # Creating QChart self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) # Creating QChartView self.chart_view = QtCharts.QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) # QWidget Layout self.main_layout = QHBoxLayout() size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) ## Left layout size.setHorizontalStretch(1) self.table_view.setSizePolicy(size) self.main_layout.addWidget(self.table_view) ## Right Layout size.setHorizontalStretch(4) self.chart_view.setSizePolicy(size) self.main_layout.addWidget(self.chart_view) # Set the layout to the QWidget self.setLayout(self.main_layout)
class Widget(QWidget): """ Класс QWidget является базовым для всех объектов пользовательского интерфейса Виджет - это элементарный объект пользовательского интерфейса: он получает события мыши, клавиатуры и другие события от оконной системы и рисует свое изображение на экране. """ def __init__(self, data, splineChartData, areaChartData, scatterChartData, pieChartData, bwChartData, candlestickChartData): QWidget.__init__(self) """ получение модели """ self.model = CustomTableModel(data) """переходим в класс CustomTableModel и создаем объект-таблицу, model-часть класса с помощью которого работаем с данными,имя поля-model """ self.table_view = QTableView() """полностью устраивает класс QTableView поэтому доп конструкторов и ф-ций не пишем, а просто создаем и он поле нашего класса, имя поля-table_view """ self.table_view.setModel(self.model) """может рисовать таблицу в соотвествие с полученными данными(3 столбца, нужные числа и тд) """ resize = QHeaderView.ResizeToContents """ Класс QHeaderView предоставляет строку заголовка или столбец заголовка для представлений элементов, заголовок маштабируется """ self.horizontal_header = self.table_view.horizontalHeader() self.vertical_header = self.table_view.verticalHeader() self.horizontal_header.setSectionResizeMode(resize) self.vertical_header.setSectionResizeMode(resize) self.horizontal_header.setStretchLastSection(True) """ Формируется данные для рисования заголовка """ """создание графика модуль QtChart предоставляет множество типов графиков и опций для графического представления данных. """ chart1 = QtCharts.QChart() """нас устраивает класс QChart полностью, доп методы и консрукторы не нужны """ chart1.setAnimationOptions(QtCharts.QChart.AllAnimations) """ установить параметры анимации, запускается рисование """ self.add_series("Значение", [0, 1], chart1) """подготовка вкладки на кот размещена диаграмма """ size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) size.setHorizontalStretch(4) #----------------------------------------- chart_view1 = QtCharts.QChartView(chart1) """подготовка визуализации продолжается """ chart_view1.setRenderHint(QPainter.Antialiasing) #self.chart_view1.setSizePolicy(size) minWidth = 400 chart_view1.setMinimumWidth(minWidth) #----------------------------------------------------- chart2 = QtCharts.QChart() chart2.setAnimationOptions(QtCharts.QChart.AllAnimations) self.add_series("Глубина", [0, 2], chart2) #данные для каждого графика chart_view2 = QtCharts.QChartView(chart2) """подготовка визуализации продолжается """ chart_view2.setRenderHint(QPainter.Antialiasing) """ QWidget расположение """ """ правое расположение """ #self.chart_view2.setSizePolicy(size) chart_view2.setMinimumWidth(minWidth) main_layout = QHBoxLayout() splitter = QSplitter() dateColumn = 0 magColumn = 1 depthsColumn = 2 xDates = self.getDateAsCategoricalColumn(dateColumn) yMagnitudes = self.getFloatColumn(magColumn) yDepths = self.getFloatColumn(depthsColumn) # print("ymags") # print(yMagnitudes) # print("ydepths") # print(yDepths) bc1 = self.createBarCharts(xDates, yMagnitudes, yDepths) bar1ChartView = QtCharts.QChartView(bc1) bar1ChartView.setRenderHint(QPainter.Antialiasing) chartViewsHbox = QHBoxLayout() chartViewsHbox.addWidget(chart_view1) chartViewsHbox.addWidget(chart_view2) vbox = QVBoxLayout() vbox.addLayout(chartViewsHbox) vbox.addWidget(bar1ChartView) vboxWidget = QWidget() vboxWidget.setLayout(vbox) splitter.addWidget(vboxWidget) splitter.addWidget(self.table_view) main_layout.addWidget(splitter) # self.setLayout(main_layout) # установить макет на QWidget """ mainWidget = QWidget() mainWidget.setLayout(main_layout) tabWidget = QTabWidget() tabWidget.addTab(mainWidget, "travis scott") splineTab = ddv.charts.createSplineChart(splineChartData) tabWidget.addTab(splineTab, "spline chart") #areaTab = ddv.charts.createAreaChart(areaChartData) #tabWidget.addTab(areaTab, "area chart") scatterTab = ddv.charts.createScatterChart(scatterChartData) tabWidget.addTab(scatterTab, "scatter chart") pieTab = ddv.charts.createPieChart(pieChartData) tabWidget.addTab(pieTab, "pie chart") bwTab = ddv.charts.createBwChart(bwChartData) tabWidget.addTab(bwTab, "b w chart") candlestickTab = ddv.charts.createCandlestickChart( candlestickChartData) tabWidget.addTab(candlestickTab, "candlestick chart") grid = QGridLayout() grid.addWidget(tabWidget) #grid.addWidget(areaTab) self.setLayout(grid) """ левое расположение """ size.setHorizontalStretch(1) self.table_view.setSizePolicy(size) def createBarCharts(self, x, y1, y2): barSet1 = QtCharts.QBarSet("Magnitude") # c1 = PySide2.QtWidgets.QColorDialog.getColor() barSet1.setColor(Qt.white) barSet1.append(y1) barSet2 = QtCharts.QBarSet("Depths") barSet2.setColor(Qt.magenta) barSet2.append(y2) barSeries1 = QtCharts.QBarSeries() barSeries1.append(barSet1) barSeries1.append(barSet2) barChart1 = QtCharts.QChart() barChart1.addSeries(barSeries1) barChart1.setTitle("my first bar chart") barChart1.setAnimationOptions(QtCharts.QChart.SeriesAnimations) categories = x barCategoryAxis = QtCharts.QBarCategoryAxis() barCategoryAxis.append(categories) barChart1.createDefaultAxes() barChart1.setAxisX(barCategoryAxis, barSeries1) barChart1.legend().setVisible(True) barChart1.legend().setAlignment(Qt.AlignTop) return barChart1 def getFloatColumn(self, column): res = [] for i in range(self.model.rowCount()): # print("checking the data...", i, self.model.index(i, column).data()) y = float(self.model.index(i, column).data()) res.append(y) return res def getDateAsCategoricalColumn(self, column): res = [] for i in range(self.model.rowCount()): t = self.model.index(i, column).data() date_fmt = "yyyy-MM-dd HH:mm:ss.zzz" #outDateFormat = "dd.MM.yyyy (h:mm)" outDateFormat = date_fmt # x = float(QDateTime().fromString(t, date_fmt).toMSecsSinceEpoch()) x = QDateTime().fromString(t, date_fmt).toString(outDateFormat) res.append(x) # y = float(self.model.index(i, columns[1]).data()) # потому что сложно рисовать график с минусовой осью ??? # if x > 0 and y > 0: # self.series.append(x, y) return res def add_series( self, name, columns, chart ): #выходит add.series так написан что по Ох автоматически будет дата? """ Формирует название оси """ self.series = QtCharts.QLineSeries() self.series.setName(name) """ формирует 1 массив series из 2 столбцов, добавляя в него данные из Х и У """ for i in range(self.model.rowCount()): """ получение даты """ t = self.model.index(i, 0).data( ) #типа нулевой столбец(дата) и в нем по строкам будем переходить с помощью цикла этого date_fmt = "yyyy-MM-dd HH:mm:ss.zzz" #но вообще тут уже прописано как бы что в нулевом столбце будет дата #x = QDateTime().fromString(t, date_fmt).toSecsSinceEpoch() x = float(QDateTime().fromString(t, date_fmt).toMSecsSinceEpoch()) #x = QDateTime().fromString("2019-01-01 12:00:00.100", date_fmt).toMSecsSinceEpoch() # не работает: # QLineSeries.append(x, y) ждёт float-ов, а не QDateTime() # x = QDateTime().fromString(t, date_fmt) y = float(self.model.index(i, columns[1]).data()) # print(x, y) # потому что сложно рисовать график с минусовой осью ??? if x > 0 and y > 0: self.series.append(x, y) chart.addSeries(self.series) """ задание оси X """ #self.axis_x = QtCharts.QDateTimeAxis() self.axis_x = QtCharts.QValueAxis() """ Класс QDateTimeAxis добавляет даты и время к оси диаграммы. """ self.axis_x.setTickCount(6) """setTickCounе( int count ) устанавливает количество отметок на оси для подсчета, на оси Х будет 10 штрихов """ #self.axis_x.setFormat("dd.MM.yy hh:mm:ss") """ setFormat - задаёт формат вывод текстового представления значения. """ self.axis_x.setTitleText("Дата") chart.addAxis(self.axis_x, Qt.AlignBottom) """ Добавляет ось оси к диаграмме, выровненной, как указано выравниванием. """ self.series.attachAxis(self.axis_x) """ Возвращает, true если ось была успешно присоединена, false в противном случае. """ """ задание оси Y """ self.axis_y = QtCharts.QValueAxis() """ Класс QValueAxis добавляет значения к осям диаграммы. """ self.axis_y.setTickCount(6) """ Свойство setTickCount содержит количество отметок на оси. Это указывает, сколько линий сетки нарисовано на графике. """ self.axis_y.setLabelFormat("%.2f") """ Свойство setLabelFormat содержит формат метки оси. """ self.axis_y.setTitleText( name ) #изменила название оси, что ифами написать, как обратиться к имени той колонки которую я в параметры передаю? chart.addAxis(self.axis_y, Qt.AlignLeft) self.series.attachAxis(self.axis_y) """ получение цвета из QC hart для использования в QTableView, будет выделять столбец таблицы тем же цветом что и линия в диарамме!! """ self.model.color = "{}".format(self.series.pen().color().name())
class Widget(QWidget): def __init__(self, data): QWidget.__init__(self) # Getting the Model self.model = CustomTableModel(data) # Creating a QTableView self.table_view = QTableView() self.table_view.setModel(self.model) # QTableView Headers resize = QHeaderView.ResizeToContents self.horizontal_header = self.table_view.horizontalHeader() self.vertical_header = self.table_view.verticalHeader() self.horizontal_header.setSectionResizeMode(resize) self.vertical_header.setSectionResizeMode(resize) self.horizontal_header.setStretchLastSection(True) # Creating QChart self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) self.add_series("Magnitude (Column 1)", [0, 1]) # Creating QChartView self.chart_view = QtCharts.QChartView(self.chart) self.chart_view.setRenderHint(QPainter.Antialiasing) # QWidget Layout self.main_layout = QHBoxLayout() size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) # Left layout size.setHorizontalStretch(1) self.table_view.setSizePolicy(size) self.main_layout.addWidget(self.table_view) # Right Layout size.setHorizontalStretch(4) self.chart_view.setSizePolicy(size) self.main_layout.addWidget(self.chart_view) # Set the layout to the QWidget self.setLayout(self.main_layout) def add_series(self, name, columns): # Create QLineSeries self.series = QtCharts.QLineSeries() self.series.setName(name) # Filling QLineSeries for i in range(self.model.rowCount()): # Getting the data t = self.model.index(i, 0).data() date_fmt = "yyyy-MM-dd HH:mm:ss.zzz" x = QDateTime().fromString(t, date_fmt).toSecsSinceEpoch() y = float(self.model.index(i, 1).data()) if x > 0 and y > 0: self.series.append(x, y) self.chart.addSeries(self.series) # Setting X-axis self.axis_x = QtCharts.QDateTimeAxis() self.axis_x.setTickCount(10) self.axis_x.setFormat("dd.MM (h:mm)") self.axis_x.setTitleText("Date") self.chart.addAxis(self.axis_x, Qt.AlignBottom) self.series.attachAxis(self.axis_x) # Setting Y-axis self.axis_y = QtCharts.QValueAxis() self.axis_y.setTickCount(10) self.axis_y.setLabelFormat("%.2f") self.axis_y.setTitleText("Magnitude") self.chart.addAxis(self.axis_y, Qt.AlignLeft) self.series.attachAxis(self.axis_y) # Getting the color from the QChart to use it on the QTableView self.model.color = "{}".format(self.series.pen().color().name())
class VfsNodeTableWidget(QWidget): def __init__(self, vfs_view, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.vnode_2click_selected = None # Getting the Model self.model = VfsNodeTableModel() # Creating a QTableView self.table_view = QTableView() self.table_view.clicked.connect(self.clicked) self.table_view.doubleClicked.connect(self.double_clicked) font = self.table_view.font() font.setPointSize(8) self.table_view.setFont(font) # self.table_view.setSortingEnabled(True) self.table_view.setModel(self.model) # QTableView Headers self.horizontal_header = self.table_view.horizontalHeader() self.vertical_header = self.table_view.verticalHeader() self.horizontal_header.setSectionResizeMode(QHeaderView.Interactive) self.vertical_header.setSectionResizeMode(QHeaderView.Interactive) self.horizontal_header.setStretchLastSection(True) # QWidget Layout self.main_layout = QHBoxLayout() size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) # Left layout size.setHorizontalStretch(1) self.table_view.setSizePolicy(size) self.main_layout.addWidget(self.table_view) # Set the layout to the QWidget self.setLayout(self.main_layout) self.model.vfs_view_set(vfs_view) def show_all_set(self, v): self.model.show_all = v self.model.update_model() def vfs_view_get(self): return self.model.vfs_view_get() def clicked(self, index): if index.isValid(): if self.model.vfs_view is not None: items = list( set([ self.model.uid_table[idx.row()] for idx in self.table_view.selectedIndexes() ])) items = [self.model.vfs_view.node_where_uid(i) for i in items] self.model.vfs_view.paths_set(items) def double_clicked(self, index): if index.isValid(): if self.vnode_2click_selected is not None: uids = [self.model.uid_table[index.row()]] self.vnode_2click_selected(uids)
class GraphWidget(QWidget): def __init__(self): QWidget.__init__(self) # Creating a QTableView self.table_view = QTableView() # QWidget Layout self.main_layout = QHBoxLayout() self.size = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) # generate the plot self.fig, self.ax = plt.subplots() self.fig.tight_layout = True self.fig.subplots_adjust(left=0.05, right=0.95, top=0.95, bottom=0.05) self.ax.margins(0, 0) self.canvas = FigureCanvas(self.fig) ## Left layout self.size.setHorizontalStretch(1) self.table_view.setSizePolicy(self.size) self.main_layout.addWidget(self.table_view) ## Right Layout self.size.setHorizontalStretch(4) self.canvas.setSizePolicy(self.size) self.main_layout.addWidget(self.canvas) # Creating QChartView self.chart_view = QtCharts.QChartView() self.chart_view.setRenderHint(QPainter.Antialiasing) # Set the layout to the QWidget self.setLayout(self.main_layout) def Load(self, data): # Getting the Model self.model = CustomTableModel(data) self.table_view.setModel(self.model) # QTableView Headers self.horizontal_header = self.table_view.horizontalHeader() self.vertical_header = self.table_view.verticalHeader() self.horizontal_header.setSectionResizeMode( QHeaderView.ResizeToContents) self.vertical_header.setSectionResizeMode(QHeaderView.ResizeToContents) self.horizontal_header.setStretchLastSection(True) #Update plot self.ax.clear() for i in range(10): x, y = [], [] for j in range(i * 200, i * 200 + 200): x.append(data[0].values[j]) y.append(data[1].values[j]) self.ax.plot(x, y, linewidth=0.5, label="Epoch : " + str(i + 1)) self.ax.legend(loc='best', fontsize='small') # generate the canvas to display the plot self.canvas.draw() self.canvas.flush_events() def use_qchart(): # Creating QChart self.chart = QtCharts.QChart() self.chart.setAnimationOptions(QtCharts.QChart.AllAnimations) font = QFont() font.setPixelSize(20) self.chart.setTitleFont(font) self.add_series("Amplitude (mV)") self.chart_view.setChart(self.chart) def add_series(self, name): for i in range(10): self.add_epoch_series(name, i * 200) self.chart.addSeries(self.series) # Setting X-axis self.axis_x = QtCharts.QValueAxis() self.axis_x.setTickCount(10) #self.axis_x.setTitleText("Time (s)") self.chart.addAxis(self.axis_x, Qt.AlignBottom) self.series.attachAxis(self.axis_x) # Setting Y-axis self.axis_y = QtCharts.QValueAxis() self.axis_y.setTickCount(10) #self.axis_y.setLabelFormat("%.5f") self.axis_y.setTitleText("Amplitude (mV)") self.chart.addAxis(self.axis_y, Qt.AlignLeft) self.series.attachAxis(self.axis_y) # Getting the color from the QChart to use it on the QTableView self.model.color = "{}".format(self.series.pen().color().name()) def add_epoch_series(self, name, startIndex): # Create QLineSeries if startIndex == 0: self.series = QtCharts.QLineSeries() self.series.setName(name) # Filling QLineSeries for i in range(startIndex, startIndex + 200): # Getting the data t = float(self.model.index(i, 0).data()) y = float(self.model.index(i, 1).data()) self.series.append(t, y) def SetChartTitle(self, title): self.chart.setTitle(title)