RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-253542

Garp's questions

Martin Hope
Garp
Asked: 2025-04-10 14:20:05 +0000 UTC

React JS Table 仅渲染部分数据(列)

  • 5

小项目.Net Core Web API+++ 。React JS​Typescriptantd

后端已准备就绪并正确返回数据(我在 Swagger 上运行它)。

数据完整到达前端。 在此处输入图片描述

该表仅显示 7 列中的 3 列。 在此处输入图片描述

代码

"use client"

import { Table } from "antd"; 
import { getAllOrders } from "@/app/Services/service";   
import { Order } from "@/app/Models/Order";    
import { useEffect, useState } from "react";


const columns = [
    {
        title: 'N',
        dataIndex: 'n',
        key: 'n',
    },
    {
        title: 'Uniq Id',
        dataIndex: 'uniqid',
        key: 'uniqid',
    },
    {
        title: 'City From',
        dataIndex: 'cityfrom',
        key: 'cityfrom',
    },
    {
        title: 'Adress From',
        dataIndex: 'adressfrom',
        key: 'adressfrom',
    },
    {
        title: 'City To',
        dataIndex: 'cityto',
        key: 'cityto',
    },
    {
        title: 'Adress To',
        dataIndex: 'adressto',
        key: 'adressto',
    },
    {
        title: 'Weight',
        dataIndex: 'weight',
        key: 'weight',
    },
    {
        title: 'Date',
        dataIndex: 'date',
        key: 'date',
    }
]



export default function AllOrders() {
    const [orders, setOrders] = useState<Order[]>([]);

    useEffect(() => {
        const getOrders = async () => {
            const responce = await getAllOrders();
            setOrders(responce);
            console.log('orders_from_responce: ', responce);
        };
        getOrders();
    }, []);   

    const data = orders.map((order, index) => ({
        key: index,
        n: (index+1),
        uniqid: order.id,
        cityfrom: order.cityfrom,
        adressfrom: order.adressfrom,
        cityto: order.cityto,
        adressto: order.adressto,
        weight: order.weight,
        date: order.date
    })) 

    return (
        <div >
            <h1>Все заказы</h1>
            <Table
                dataSource={data}
                columns={columns}
                pagination={false}
                footer={() => ""}
                bordered
            />
        </div >
    );
}

数据模型是Order:

export interface Order {
    id: string;
    cityfrom: string;
    adressfrom: string;
    cityto: string;
    adressto: string;
    weight: number,
    date: Date,
    specialnote: string
}

该模型用于此生产线const [orders, setOrders] = useState<Order[]>([]);。数据与模型相符。

4 列类型未显示string,因此我认为问题出在数据类型不匹配。同时,id(uuid)列string也可见。

reactjs
  • 1 个回答
  • 23 Views
Martin Hope
Garp
Asked: 2025-03-28 16:38:54 +0000 UTC

Web API + postgresql,错误‘42p01 关系...不存在’

  • 5

小项目ASP .Net Web API,bd postgresql。

该数据库booksdb是在管理面板中手动创建的。有一张桌子books,位于shemas.public。手动添加了几行数据(QueryTool也可以通过管理面板中的界面)

语境:

public class BookStoreDbContext : DbContext
{
    public BookStoreDbContext(DbContextOptions<BookStoreDbContext> options)
            : base(options) 
    {
    }
    public DbSet<BookEntity> Books { get; set; }
}

连接字符串:

"ConnectionStrings": {
  "BookStoreDbContext": " ......User ID=postgres;Database=booksdb;"

错误:

在此处输入图片描述

项目正在正确构建。

没有前端,我使用 Swagger,它应该返回模拟数据字符串。

错误前调试:

在此处输入图片描述

该库可以从外部访问,例如从 Python:

import psycopg2

conn = psycopg2.connect(dbname="books1db",
                 host="127.0.0.1",
                 user="postgres",
                 password="my_password",
                 port="5432")
cursor = conn.cursor()
query = "SELECT * FROM books"
cursor.execute(query)  
result = cursor.fetchall()
cursor.close()
conn.close()
for row in result:
    print(row)

关于这个错误有很多记载(例如),但所有情况都是(1)代码中数据库创建不正确(2)代码中查询不正确。 “不正确”是因为大小写不正确,或者括号和引号不正确,或者必须通过模式名称访问表。就我而言,这些都不存在。

postgresql
  • 1 个回答
  • 93 Views
Martin Hope
Garp
Asked: 2025-02-17 15:47:14 +0000 UTC

.NET MVC + React js,如何附加获取

  • 5

metanit上有一个基本示例,我已将其简化并尝试重新制作fetch。

控制器:

using Microsoft.AspNetCore.Mvc;
using ReactWithASP.Server.Models;

namespace ReactWithASP.Server.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class PhonesController : Controller
    {
        static readonly List<Phone> data;

        static PhonesController()
        {
            data = new List<Phone>
            {
                new Phone { Id = Guid.NewGuid().ToString(), Name="iPhone", Price=52000 },
                new Phone { Id = Guid.NewGuid().ToString(), Name="Samsung", Price=42000 },
                new Phone { Id = Guid.NewGuid().ToString(), Name="Xiaomi ", Price=66600 },
            };
        }

        [HttpGet]
        public IEnumerable<Phone> Get()
        {
            return data;
        }
    }
}

表现:

import React from 'react';  
import './App.css';

class PhonesList extends React.Component {
    constructor(props) {
        super(props);
        this.state = { phones: [] };
    }

    loadData() {
        fetch('phones')
            .then(response => response.text())
        .then((data) => this.setState({ phones: data }));  
    }

    componentDidMount() {
        this.loadData();
    }

    render() {
        return <div>
            <h2>List of phones</h2>
            <div>
                {
                    this.state.phones 
                }  
            </div>
        </div>;
    }
}

export default PhonesList 

数据直接在控制器中定义。需要在启动时将它们拖入视图中。在链接中的原始示例中,它是通过完成的XMLHttpRequest,但我想使用fetch。在所呈现的版本中,它返回的不是数据,而是标记index.html。

程序.cs

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddMemoryCache();
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddControllersWithViews();
builder.Services.AddControllers();


var app = builder.Build();

app.UseDefaultFiles();
app.UseStaticFiles();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseDeveloperExceptionPage();app.UseDefaultFiles();
app.UseStaticFiles();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.MapDefaultControllerRoute();
app.UseAntiforgery();
app.Run();
c#
  • 1 个回答
  • 63 Views
Martin Hope
Garp
Asked: 2025-01-28 17:15:44 +0000 UTC

python 终止进程

  • 5

有一个项目。该项目有一个文件夹tests,其中存放各个测试文件,并run_tests使用以下函数运行所有测试文件main:

def run_script(script):
    subprocess.Popen(["python3", "-Wignore", "-m", script])

def main():
    for file in os.listdir('tests'):
        run_script('tests.{}'.format(file.split('.')[0]))

if __name__ == "__main__":
    main()

使用命令从终端启动python -m tests.run_tests。所有文件均正常工作,但该过程未在终端中完成。

结果是这样的: 在此处输入图片描述

它应该是这样的(这是手动按下之后ctrl + c): 在此处输入图片描述

我在代码中添加了sys.exit()、、、sys.exit(0)(最后两个是糟糕的选项)——但这没有帮助exit()。quit()该怎么办?

更新

已添加print(script)到run_script前面subprocess...。结果是这样的: 在此处输入图片描述

python
  • 1 个回答
  • 55 Views
Martin Hope
Garp
Asked: 2025-01-13 17:16:39 +0000 UTC

python异步启动多个子进程

  • 5

一个文件夹中有多个 Python 文件。与它们一起还有一个文件run_scripts,应该使用以下命令从终端同时启动它们python -m scripts.run_scripts

该启动文件包含以下代码:

async def main():
    await asyncio.gather(asyncio.run("python3 -m scripts.script1", shell=True),
                         asyncio.run("python3 -m scripts.script2", shell=True),
                         asyncio.run("python3 -m scripts.script3", shell=True),
                         asyncio.run("python3 -m tests.script4", ))


main()

我尝试将其传递给函数subprocess.run,asyncio.run但这样的参数不被接受。上面的例子也不起作用。我也尝试main用async&运行它await,但不起作用。

如何做到这一点?

操作系统Linux。

python
  • 1 个回答
  • 58 Views
Martin Hope
Garp
Asked: 2024-12-28 14:54:27 +0000 UTC

访问私有变量

  • 6

这种对私有变量的访问(不改变它们!)——如何安全和可接受?

class MyClass:
    def __init__(self):
        self.__private_var = 66


class_instance = MyClass()
print(class_instance._MyClass__private_var)
python
  • 1 个回答
  • 43 Views
Martin Hope
Garp
Asked: 2024-11-29 15:05:25 +0000 UTC

PyCharm - 转到定义

  • 7

跳转到定义 - 通常作为鼠标左键单击 + 的组合使用Ctrl。

我尝试了不同的组合(Shift而不是Ctrl,或同时,以及各种其他东西),阅读 StOv,文档,在文件/设置中搜索 - 我不明白。这里是如何运作的?

pycharm
  • 1 个回答
  • 21 Views
Martin Hope
Garp
Asked: 2024-09-20 20:43:47 +0000 UTC

求解已知 x 和 y 的线性方程组

  • 5

有两个坐标已知的点。我们需要一个公式来计算这些点所在的直线。这个问题可以通过线性方程组来解决。有很多已知或未知的解决方案的例子numpy,但我scipy的情况恰恰相反。公式很简单,让我提醒你一下。kbxyy = kx + b

我进行了搜索,但没有找到现成的解决方案。有这样的事吗?

python
  • 2 个回答
  • 66 Views
Martin Hope
Garp
Asked: 2024-09-03 18:09:36 +0000 UTC

PyQt/PySide 事件卡在 Spinbox 中

  • 6

如果layout.addWidget(sb)注释掉该行,小部件将捕获事件(在本例中为键盘事件)。
如果你离开队伍,那就不行。

我需要旋转框和键盘事件。

import sys
import PySide6.QtWidgets
from PySide6.QtCore import *
from PySide6.QtWidgets import *
from PySide6.QtGui import *


class Main(QWidget):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.resize(300,300)
        layout = QVBoxLayout()
        w = QWidget()
        sb = QSpinBox()
        sb.setRange(-10,10)
        layout.addWidget(w)
        #layout.addWidget(sb)                                 # ?!
        self.installEventFilter(self)
        self.setLayout(layout)

    def eventFilter(self, watched: QObject, event: QEvent):
        if event.type() == QEvent.Type.KeyPress:
            if event.key() == Qt.Key.Key_S:
                print("__S__")
                return True
            elif event.key() == Qt.Key.Key_A:
                print("__A__")
                return True
        return False


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Main()
    ex.show()
    sys.exit(app.exec())
python
  • 1 个回答
  • 20 Views
Martin Hope
Garp
Asked: 2024-08-08 19:48:08 +0000 UTC

是否可以编辑(删除)QChart 图表的图例?

  • 6

有一个图表,图表有一个图例。
我想删除图例中的任何一个方块。
如何做到这一点?

from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView, QValueAxis
import sys
import math
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)


class Chart(QWidget):
    def __init__(self):
        super().__init__()
        self.chart = QChart()
        self.data = [math.sin(i * 0.1) for i in range(0, 100, 1)]
        self.series1 = QLineSeries()
        for i in range (0, 100, 1):
            self.series1.append(i, self.data[i])
        self.series1.setName("series1")
        self.series2 = QLineSeries()
        self.series2.append(0, 0)
        self.series2.append(100, 4)
        self.series2.setName("series1")
        self.series3 = QLineSeries()
        self.series3.append(0, 4)
        self.series3.append(100, -3)
        self.series3.setName("series3")
        self.axisX = QValueAxis()
        self.axisY = QValueAxis()
        self.chart = QChart()
        self.chart.addSeries(self.series1)
        self.chart.addSeries(self.series2)
        self.chart.addSeries(self.series3)
        self.chart.setAxisX(self.axisX)
        self.chart.setAxisY(self.axisY)
        self.chart.axisY().setRange(-5, 5)
        self.chart.axisX().setRange(0, 100)
        self.chart.legend().setVisible(True)
        self.chart_view = QChartView(self.chart)
        vbox = QVBoxLayout()
        vbox.addWidget(self.chart_view)
        self.setLayout(vbox)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Chart()
    window.show()
    sys.exit(app.exec())
python
  • 1 个回答
  • 13 Views
Martin Hope
Garp
Asked: 2024-07-21 17:31:42 +0000 UTC

Python **kargs 需要参数过滤器

  • 5

不知道会出现什么参数,因此您需要编写一个过滤条件,如下所示:

def func(**kargs):
    if x in kargs.keys():   # NameError: name 'x' is not defined
        print(kargs[x])

func(n=4, x='aaa', a=22)
python
  • 1 个回答
  • 27 Views
Martin Hope
Garp
Asked: 2024-07-18 15:16:17 +0000 UTC

PyQt QPainter 如何应用抗锯齿?

  • 5

有一个绘制的千分表。尽管在 Painter 存在的任何地方都应用了抗锯齿,但红色部分仍然存在深度不规则(毛刺)。此外,沿着半圆的边界还有黑色区域。如何去除它?

from PySide6.QtGui import QPainter, QColor, QPolygon, QPen, QPaintEvent, QConicalGradient, QGradient, QBrush, QRegion, QResizeEvent
from PySide6.QtCore import Signal, QSize, QRect, QPoint, Qt
from PySide6.QtWidgets import QWidget, QSizePolicy, QLabel
from typing import List, Tuple
import numpy


class ArrowPointerIndicator(QWidget):

    def __init__(self,
                 chunks: List[Tuple[float, QColor]],
                 lineWidth: int = 5,
                 parent: QWidget = None) ->None:
        super().__init__(parent)
        self.__arrowColor: QColor = QColor(255, 0, 0)
        self.__gradient: QGradient = None
        self.setChunks(chunks)
        self.__arrow = QPolygon([
            QPoint(-2, -80),
            QPoint(0, -100),
            QPoint(2, -80),
            QPoint(2, 10),
            QPoint(-2, 10),
            QPoint(-2, -80)
        ])
        self.__minimum = -10.0
        self.__maximum = 10.0
        self.__lineWidth = lineWidth
        self.__value: float = 0.0

    def arrowColor(self) ->QColor:
        return self.__arrowColor

    def setArrowColor(self, arrowColor: QColor) ->QColor:
        if self.__arrowColor == arrowColor:
            return
        self.__arrowColor = arrowColor
        self.update()

    def setChunks(self, chunks: List[Tuple[float, QColor]]) ->None:
        weightsSum: float = sum(item[0] for item in chunks)
        chunks = [(item[0] / weightsSum / 2, item[1]) for item in chunks]
        self.__gradient = QConicalGradient()
        passedWeight = 0.25
        for weight, color in chunks:
            self.__gradient.setColorAt(passedWeight, color)
            self.__gradient.setColorAt(passedWeight + weight - 0.0000000001, color)
            passedWeight += weight
        self.__gradient.setCenter(QPoint(0, 0))
        self.__gradient.setAngle(-90)
        self.update()

    def paintEvent(self, event: QPaintEvent) ->None:
        super().paintEvent(event)
        drawSize = min(self.width() / 2, self.height())
        painter = QPainter(self)
        painter.translate(self.width() / 2, self.height())
        painter.setRenderHint(QPainter.RenderHint.Antialiasing)
        self.__drawColorArc(drawSize, painter)
        self.__drawArrowPointer(drawSize, painter)

    def __drawColorArc(self, drawSize: int, painter: QPainter) ->None:
        drawingRect = QRect(-drawSize, -drawSize, 2 * drawSize, 2 * drawSize)
        excludeRect = QRect(-drawSize + self.__lineWidth, -drawSize + self.__lineWidth, 2 * (drawSize - self.__lineWidth), 2 * (drawSize - self.__lineWidth))
        painter.save()
        outerRegion = QRegion(drawingRect, QRegion.RegionType.Ellipse).subtracted(QRegion(excludeRect, QRegion.RegionType.Ellipse))
        painter.setClipRegion(outerRegion)
        painter.setBrush(QBrush(self.__gradient))
        painter.drawChord(drawingRect, 0, 180 * 16)
        painter.setRenderHint(QPainter.RenderHint.Antialiasing)
        painter.restore()

    def __drawArrowPointer(self, drawSize: int, painter: QPainter) ->None:
        painter.save()
        painter.setBrush(self.__arrowColor)
        painter.scale(drawSize / 100.0, drawSize / 100.0)
        painter.drawConvexPolygon(self.__arrow)
        painter.setRenderHint(QPainter.RenderHint.Antialiasing)
        painter.restore()


if __name__ == '__main__':
    from PySide6.QtWidgets import QApplication
    import sys
    app = QApplication(sys.argv)
    window = ArrowPointerIndicator(
            chunks=[
                (4, Qt.GlobalColor.white),
                (1, Qt.GlobalColor.red),
                (1, Qt.GlobalColor.white),
                (1, Qt.GlobalColor.red),
                (4, Qt.GlobalColor.white),
        ], lineWidth=1000000)
    window.show()
    sys.exit(app.exec())

在此输入图像描述

python
  • 1 个回答
  • 31 Views
Martin Hope
Garp
Asked: 2024-06-21 16:58:14 +0000 UTC

PyQt QChart 图形网格的颜色和频率

  • 6

有一个简单的图表。怎么做:

  1. 设置网格颜色。

  2. 默认情况下,网格链接出现在轴上的每个标记处。在这种情况下,标记 ( labels) 沿着 X 每 20 个点(在此处设置x_axis.setTickInterval(20)),网格的垂直条纹与它们相对应。游戏逻辑相同。例如,我需要每 5 个点进行标记,但网格仍保持现在的样子。

from PySide6.QtWidgets import QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView, QValueAxis
from PySide6.QtGui import QColor, QBrush
import sys
import math


class Chart1(QChart):
    def __init__(self):
        super().__init__()
        series = QLineSeries()
        x_axis = QValueAxis()
        y_axis = QValueAxis()
        self.setAxisX(x_axis)
        self.setAxisY(y_axis)
        self.legend().setVisible(False)
        for i in range (0, 100, 1):
            series.append(i, math.sin(i))
        self.addSeries(series)
        self.axisX().setRange(0, 100)
        self.axisY().setRange(-1,1)
        x_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        x_axis.setTickInterval(20)
        y_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        y_axis.setTickInterval(0.2)
        axis_brush = QBrush(QColor("white"))
        y_axis.setLabelsBrush(axis_brush)
        x_axis.setLabelsBrush(axis_brush)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    c1 = Chart1()
    chart_view = QChartView(c1)
    chart_view.chart().setBackgroundBrush(QBrush("black"))
    chart_view.show()
    sys.exit(app.exec())
python
  • 1 个回答
  • 30 Views
Martin Hope
Garp
Asked: 2024-06-14 15:32:33 +0000 UTC

如何将 QLabel 小部件放置在 QChart 之上?

  • 6

是否可以在图表顶部添加一个小部件?
小部件需要类似QTextEdit或多行的东西QLabel,我还没有决定,主要是能够放置文本行。

在此输入图像描述

import sys
from math import sin
from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView
from PySide6.QtCore import Qt, QObject, QCoreApplication, QPointF


class Chart1(QWidget):
    def __init__(self):
        super().__init__()
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        self.series1 = QLineSeries()
        for i in range(0, 500, 1):
            self.series1.append([QPointF(i, sin(i * 0.05))])
        self.chart.addSeries(self.series1)
        self.chart.createDefaultAxes()
        self.chart.axisX().setRange(0, 500)
        self.chart.axisY().setRange(-5,5)
        self.chart_view = QChartView(self.chart)
        vbox = QVBoxLayout()
        vbox.addWidget(self.chart_view)
        self.setLayout(vbox)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Chart1()
    window.show()
    sys.exit(app.exec())
python
  • 2 个回答
  • 32 Views
Martin Hope
Garp
Asked: 2024-06-02 17:37:31 +0000 UTC

更改 QPainter 对象的颜色

  • 7

中画了几个圆圈(按钮)QPainter。
我们需要能够单独更改其中任何一个的颜色。

在这个玩具版本中,颜色变化是通过按下相应的热键引起的。

import sys
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *


class Main(QWidget):
    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.state_button_1 = 0
        self.state_button_2 = 0
        self.state_button_3 = 0

def paintEvent(self, event):
    painter = QPainter(self)
    painter.setRenderHint(QPainter.Antialiasing, True)
    painter.setPen(QPen(Qt.black, 2, Qt.SolidLine))
    painter.setBrush(QBrush(Qt.red, Qt.SolidPattern))
    painter.drawEllipse(50, 50, 20, 20)
    painter.drawEllipse(30, 70, 20, 20)
    painter.drawEllipse(70, 70, 20, 20)

def keyPressEvent(self, keyEvent):
    key = keyEvent.key()
    if key == Qt.Key_Q:
        if self.state_button_1:
            # меняем цвет кнопки  (50, 50) на зелёный
            self.state_button_1 = 0
            print('кнопка 1 зелёная')
        else:
            # меняем цвет кнопки  (50, 50) на красный
            self.state_button_1 = 1
            print('кнопка 1 красная')
    elif key == Qt.Key_W:
        if self.state_button_2:
            # меняем цвет кнопки  (30,70) на зелёный
            self.state_button_2 = 0
            print('кнопка 2 зелёная')
        else:
            # меняем цвет кнопки  (30,70) на красный
            self.state_button_2 = 1
            print('кнопка 2 красная')
    elif key == Qt.Key_E:  
        if self.state_button_3:
            # меняем цвет кнопки  (70, 70) на зелёный
            self.state_button_3 = 0
            print('кнопка 3 зелёная')
        else:
            # меняем цвет кнопки  (70, 70) на красный
            self.state_button_3 = 1
            print('кнопка 3 красная')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Main()
    w.show()
    sys.exit(app.exec())
python
  • 1 个回答
  • 31 Views
Martin Hope
Garp
Asked: 2024-05-15 18:14:37 +0000 UTC

更改 PySide\PyQt 中的尺寸时保留 QChart 图表布局

  • 5

当比例发生变化或没有足够的空间时,轴上的标记会折叠并变成椭圆形。

在此输入图像描述

是否可以覆盖此行为?即使数字间隔非常近或相互重叠,保持可见标记也非常重要。

最小可重现示例:

import sys
from PySide6.QtCore import QPointF, Qt, QMargins
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout
from PySide6.QtCharts import QChartView, QChart, QLineSeries, QAreaSeries
from PySide6.QtGui import QGradient, QPen, QLinearGradient, QPainter
import math


class TestChart(QWidget):
    def __init__(self):
        super().__init__()
        self.series_0 = QLineSeries()
        self.series_1 = QLineSeries()
        for i in range(0, 100, 1):
            self.series_0.append([QPointF(i, math.cos(i * 0.1))])
        self.series_1.append(QPointF(0, 0))
        self.series_1.append(QPointF(100, 0))
        self.series = QAreaSeries(self.series_0, self.series_1)
        gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 1))
        gradient.setColorAt(0.0, 0x3cc63c)
        gradient.setColorAt(1.0, 0x26f626)
        gradient.setCoordinateMode(QGradient.ObjectBoundingMode)
        self.series.setBrush(gradient)
        #
        self.chart = QChart()
        self.chart.addSeries(self.series)
        self.chart.legend().hide()
        self.chart.createDefaultAxes()
        self.chart.setMargins(QMargins(0,0,0,0))
        _chart_view = QChartView(self.chart)
        _chart_view.setRenderHint(QPainter.Antialiasing)
        vbox = QVBoxLayout()
        vbox.addWidget(_chart_view)
        self.setLayout(vbox)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = TestChart()
    window.show()
    window.resize(400, 300)
    sys.exit(app.exec())
python
  • 1 个回答
  • 18 Views
Martin Hope
Garp
Asked: 2024-04-19 18:01:48 +0000 UTC

如何编写一个类来确认访问结束并能够取消其中执行的最后一个操作?

  • 6

有一个类有两个方法:

  • method1()- 一次添加一个(增量);
  • method2()- 获取一个字符串并将其添加到列表中。

你需要什么:

  1. 完成使用某个方法后(不是每次调用后,而是不再需要该方法后),您需要通过调用 来表明这一点escape_method()。
    如果您忘记执行此操作,则:

    • 第二种方法将无法使用
    • 当您完成该类的工作时(见下文),菜单将不会出现。
  2. 您还需要指示该类的工作结束(方法调用escape_class())。
    此方法将返回“是”\“否”菜单。

    • 如果“是”,则保存更改,我们可以获得变量。
    • 如果“否”——他们就没有得救。

仅当那些已工作method1且method2已关闭的项目才会被调用。‘关闭’课程后,my_list也可以counter通过调用来获取get_data()。

  1. 一次只能有一个(method1()或)方法在运行method2(),您需要了解是哪一个。
    这是通过一个变量来完成的,其中写入当前方法的名称,并且可以获取该变量。escape_method它在方法调用之间保留此状态,并在 close( ) 当前方法后重置。

  2. 我们需要能够撤消 和 的最后一个method1()操作method2()。

这些方法彼此不相关;一个的完成并不意味着另一个的开始。

我大致做了第1 - 3点,但我不喜欢它的工作原理(特别是复选框不太可靠)。
我怎样才能改变这个?您可能需要装饰器或外部控制类。

此外,类必须my_list仅counter通过方法get_data()并且仅在方法关闭后(因此方法被关闭)返回变量。
如何实施?

第4点很麻烦,我都不想贴了。如何撤消上次操作?

class DataProcessing:
    def __init__(self):
        self.my_list = []                    # method1
        self.counter = 0                     # method2
        self.current_method = 0              # текущий метод
        self.are_methods_closed = True       # флажок закрытия метода
        self.is_class_closed = True          # флажок закрытия класса

    def method1(self):
        if self.are_methods_closed:
            self.are_methods_closed = False           # начало сессии этого метода
            self.current_method = 1
            self.counter += 1
        elif self.are_methods_closed == False and self.current_method == 1:   # продолжение сессии этого метода
            self.counter += 1

    def method2(self, value):
        if self.are_methods_closed:
            self.are_methods_closed = False
            self.current_method = 2
            self.my_list.append(value)
        elif self.are_methods_closed == False and self.current_method == 2:
            self.my_list.append(value)

    def escape_method(self):
        self.are_methods_closed = True
        self.current_method = 0

    def escape_class(self):
        if self.are_methods_closed:
            text = input("Сохранить изменения? \n Введите Да либо Нет: ")
            if text == 'Да':
                print('Изменения сохранены')
                self.is_class_closed = True
            elif text == 'Нет':
                print('Изменения не сохранены')
                self.is_class_closed = True
            else:
                pass

    def get_data(self, n):
        if n == 1:
            return(self.counter)
        elif n == 2:
            return (self.my_list)
python
  • 1 个回答
  • 66 Views
Martin Hope
Garp
Asked: 2024-04-12 15:24:52 +0000 UTC

PyQt如何在放大时看到图形超出可见区域边缘的部分?

  • 6

放大时,图像(图形)的一部分会超出可见区域的边缘。理论上,您可以通过移动滚动滑块(滚动)(2)通过移动箭头来看到这个消失的部分(1)(3)在线地图具有拖放功能,但这不是我们的情况。

由于某些原因(没有鼠标,只有键盘),需要使用“用箭头移动图形”的方法。如何实施?

此外,图表的起始图像必须完全适合屏幕。

from PySide6.QtWidgets import QWidget, QApplication, QHBoxLayout, QScrollArea, QVBoxLayout
from PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis
from PySide6.QtCore import QPointF
from PySide6.QtGui import QPainter, Qt
import math
import sys


class Charts(QWidget):
    def __init__(self, parent=None):
        super(Charts, self).__init__(parent)
        self.zoomFactor = 1.1
        self.zoom_value = 0
        self.chart = QChart()
        self.series1 = QLineSeries()
        for i in range(0,2500,1):
            self.series1.append([QPointF(i, math.sin(i * 0.01))])
        self.chart.addSeries(self.series1)
        y_axis = QValueAxis()
        y_axis.setRange(-1, 1)
        y_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        y_axis.setTickInterval(20)
        x_axis = QValueAxis()
        x_axis.setRange(1, 2500)
        x_axis.setTickInterval(100)
        x_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        self.chart.addAxis(x_axis, Qt.AlignmentFlag.AlignBottom)
        self.chart.addAxis(y_axis, Qt.AlignmentFlag.AlignLeft)
        self.chart.legend().hide()
        self.chart.createDefaultAxes()
        self.chartview = QChartView(self.chart)
        self.chartview.setRenderHint(QPainter.Antialiasing)
        vbox = QVBoxLayout()
        vbox.addWidget(self.chartview)
        self.setLayout(vbox)

    def keyPressEvent(self, keyEvent):
        key = keyEvent.key()
        if key == Qt.Key_W and self.zoom_value < 10:
            self.chartview.chart().zoom(self.zoomFactor)
            self.zoom_value = self.zoom_value + 1
        elif key == Qt.Key_S and self.zoom_value > 0:
            self.chartview.chart().zoom(1 / self.zoomFactor)
            self.zoom_value = self.zoom_value - 1


if __name__ == '__main__':
    app = QApplication(sys.argv)
    charts = Charts()
    charts.show()
    sys.exit(app.exec())
python
  • 1 个回答
  • 24 Views
Martin Hope
Garp
Asked: 2024-04-10 15:26:15 +0000 UTC

在 PyQt 中更改图表比例时添加滚动

  • 6

有一个图表可以通过按热键来放大。

问题 1. 如何添加自动添加垂直和水平滚动条(滚动条)并能够使用箭头移动。
问题2:改变比例时,需要重新计算坐标轴的值。

import sys
import math
from PySide6.QtWidgets import QWidget, QApplication, QHBoxLayout, QScrollArea, QVBoxLayout
from PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis
from PySide6.QtCore import QPointF
from PySide6.QtGui import QPainter, Qt


class Charts(QWidget):
    def __init__(self, parent=None):
        super(Charts, self).__init__(parent)
        self.series1= QLineSeries()
        self.zoomFactor = 1.1
        self.zoom_value = 0   
        self.chart1 = QChart()
        for i in range(0,2500,1):
            self.series1.append([QPointF(i, math.sin(i * 0.01))])
        self.chart1.addSeries(self.series1)
        y_axis = QValueAxis()
        y_axis.setRange(-100, 100)
        y_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        y_axis.setTickInterval(20)
        x_axis = QValueAxis()
        x_axis.setRange(1, 2500)
        x_axis.setTickInterval(100)
        x_axis.setTickType(QValueAxis.TickType.TicksDynamic)
        self.chart1.addAxis(x_axis, Qt.AlignmentFlag.AlignBottom)
        self.chart1.addAxis(y_axis, Qt.AlignmentFlag.AlignLeft)
        self.chart1.legend().hide()

        self.chartview1 = QChartView(self.chart1)
        self.chartview1.setRenderHint(QPainter.Antialiasing)

        vbox = QVBoxLayout()
        vbox.addWidget(self.chartview1)
        self.setLayout(vbox)

    def keyPressEvent(self, keyEvent):
        key = keyEvent.key()
        if key == Qt.Key_W and self.zoom_value < 10:
            self.chartview1.chart().zoom(self.zoomFactor)
            self.zoom_value = self.zoom_value + 1
        elif key == Qt.Key_S and self.zoom_value > 0:
            self.chartview1.chart().zoom(1 / self.zoomFactor)
            self.zoom_value = self.zoom_value - 1


if __name__ == '__main__':
    app = QApplication(sys.argv)
    charts = Charts()
    charts.show()
    sys.exit(app.exec())
python
  • 1 个回答
  • 30 Views
Martin Hope
Garp
Asked: 2024-03-29 16:58:52 +0000 UTC

是否可以在 QGroupBox 的标题中排列多个元素?

  • 6

是否可以在标题中放置多个元素QGroupBox?
并且具有不同类型,即 不仅仅是一个字符串。
它应该是这样的:“ <= GroupBoxName =>”

from PySide6.QtWidgets import Widget,QLabel,QApplication,QVBoxLayout,QGroupBox,QPushButton


class GroupboxTest(QWidget):
    def __init__(self, parent=None):
        super(GroupboxTest, self).__init__(parent)
        groupbox_name = 'GroupboxName'
        groupbox_button_to_left = QPushButton('<=')          #  1
        groupbox_button_to_right = QPushButton('=>')         #  2
        groupbox = QGroupBox(groupbox_name)
        vbox = QVBoxLayout()
        label1 = QLabel('111')
        label2 = QLabel('222')
        label3 = QLabel('333')
        vbox.addWidget(label1)
        vbox.addWidget(label2)
        vbox.addWidget(label3)
        groupbox.setLayout(vbox)
        vbox1 = QVBoxLayout()
        vbox1.addWidget(groupbox)
        self.setLayout(vbox1)

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = GroupboxTest()
    w.show()
    sys.exit(app.exec())
python
  • 1 个回答
  • 37 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5