RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

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

Konstantin's questions

Martin Hope
Konstantin
Asked: 2022-08-15 01:40:53 +0000 UTC

PySide2 和 MySQL 无法从数据库连接到显示表

  • 0

无法使用 QSqlTableModel 显示来自远程 QTableView 数据库的表(据我了解,与数据库本身的连接不起作用)。有一个代码不起作用,我无法弄清楚问题是什么......

import sys

from PySide2.QtCore import QSize
from PySide2.QtSql import QSqlDatabase, QSqlTableModel
from PySide2.QtWidgets import QApplication, QMainWindow, QTableView

db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("server167.hosting.reg.ru")
db.setDatabaseName("db")
db.setUserName("<user name>")
db.setPassword("<password>")
db.open()

print(db, type(db))
if db.open():
    print("Database Open!")
else:
    print("Database NOT Open!")




class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.table = QTableView()

        self.model = QSqlTableModel(db=db)

        self.table.setModel(self.model)

        self.model.setTable("objects")
        self.model.select()

        self.setMinimumSize(QSize(1024, 600))
        self.setCentralWidget(self.table)


app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

我检查了100次连接数据,由于填充表的代码是100%执行的,我当然可以把连接器全部拿走,但我真的很想用Qt =)填充数据库表的代码:

import mysql.connector as mysql

mysql_conn = mysql.connect(
    host='server167.hosting.reg.ru',
    user='u1082920_root',
    password='1501kZn1501!',
    database = 'u1082920_docs_db'
)

with mysql_conn as connection:
    cursor = connection.cursor()
    cursor.execute("""DROP TABLE IF EXISTS objects""")
    cursor.execute("""CREATE TABLE objects(id INTEGER PRIMARY KEY, data TEXT NOT NULL,
                                            plan TEXT NOT NULL, name_plan TEXT NOT NULL)""")
    # # SQL запрос на вставку
    query = f"INSERT INTO objects (id, data,plan,name_plan) VALUES ('{1}', '{str(2)}', '{str(3)}', '{str(4)}')"
    cursor.execute(query)
    query = f"INSERT INTO objects (id, data,plan,name_plan) VALUES ('{2}', '{str(2)}', '{str(3)}', '{str(4)}')"
    cursor.execute(query)

    connection.commit()
    connection.close()
mysql pyqt5
  • 2 个回答
  • 33 Views
Martin Hope
Konstantin
Asked: 2022-07-17 05:07:15 +0000 UTC

在 Qimage 上放置颜色数组

  • 0

如何放置一组颜色QImage?

我这样做:

import sys
from PySide2.QtGui import QPixmap,  QImage
from PySide2.QtWidgets import QMainWindow, QApplication, QLabel, QHBoxLayout, QPushButton, QWidget
import numpy as np

# 1. Случайные числа в матрице N на M
N = 5
M = 5
data = np.random.random((N, M))
bins = np.array([0.00, 0.10, 0.15, 0.25, 0.30, 0.40, 0.6, 0.8, 0.95])
palette=np.array([[0, 30, 255], [0, 80, 255],[0, 100, 255],
                  [0, 255, 255], [20, 255, 255],[100, 100, 255],
                  [200, 50, 255], [255, 255, 100],[255, 255, 0]])


class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.title = "Image Viewer"
        self.setWindowTitle(self.title)
        central_widget = QWidget()
        box = QHBoxLayout()
        self.label = QLabel()
        self.button = QPushButton("Click me")
        self.button.clicked.connect(self.save_heat_map)
        box.addWidget(self.label)
        box.addWidget(self.button)
        central_widget.setLayout(box)
        self.setCentralWidget(central_widget)

    def save_heat_map(self):
        digitize = np.digitize(data, bins, right=True)
        digitize = np.expand_dims(digitize, axis=2)
        im = np.choose(digitize, palette, mode='clip')

        print(im)
        im = np.uint8(im)

        heat_map =  QPixmap(QImage(im, im.shape[1], im.shape[0], QImage.Format_RGB888))
        heat_map.save('test_output.png')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

结果,我得到了一张图片,其中第一行颜色是正常的,而第二行和随后的颜色好像有偏移......我不知道为什么 =(

在此处输入图像描述

那些。第二行第一个像素的颜色应该(255, 255, 0)是(255, 0, 255)...

python python-3.x
  • 1 个回答
  • 30 Views
Martin Hope
Konstantin
Asked: 2022-07-15 21:54:05 +0000 UTC

绘制热图

  • 0

有一个大小为 500 x 200 的数据集(随机生成):

N = 500
M = 200
data = numpy.random.random((N, M))

为了以颜色表示数据,我使用了我的 save_heat_map 函数,它创建了一个相称的白色 QPixmap(500 x 200),然后调用 create_heat_map 函数,它从数据中确定最大值并根据来自的值逐像素着色像素数据集,即 每个像素对应于某个数据值(像素 (0,0) 的颜色将取决于 data[0,0])。然后保存结果的文件(大小为 500 x 200 的图片)。

问题:图片是500x200的时候很好,而不是5000x2000 =)如何让它更快?(颜色不重要)

import sys
from PySide2.QtGui import QPixmap, QColor
from PySide2.QtWidgets import QMainWindow, QApplication, QLabel, QHBoxLayout, QPushButton, QWidget
import numpy

# 1. Случайные числа в матрице N на M
N = 500
M = 200
data = numpy.random.random((N, M))


class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.title = "Image Viewer"
        self.setWindowTitle(self.title)
        central_widget = QWidget()
        box = QHBoxLayout()
        self.label = QLabel()
        self.button = QPushButton("Click me")
        self.button.clicked.connect(self.save_heat_map)
        box.addWidget(self.label)
        box.addWidget(self.button)
        central_widget.setLayout(box)
        self.setCentralWidget(central_widget)

    def save_heat_map(self):
        # создадим соразмерный pixmap_zone и сделаем его прозрачным
        pixmap_zone = QPixmap(N, M)
        pixmap_zone.fill(QColor(255, 255, 255, 255))
        # Нарисуем тепловую карту
        qimg_zone = pixmap_zone.toImage()
        heat_map = self.create_heat_map(data, N, M, qimg_zone)
        heat_map.save('test_output.png')


    def create_heat_map(self, arr, width: int, height: int, qimg_zone):
        max_el = arr.max()
        for x in range(width):
            for y in range(height):
                if arr[x, y] >= max_el:
                    qimg_zone.setPixelColor(x, y, QColor(255, 0, 0, 255))
                # красный
                elif max_el * 1.00 > arr[x, y] >= max_el * 0.90:
                    qimg_zone.setPixelColor(x, y, QColor(255, 10, 0, 255))
                # рыжий
                elif max_el * 0.90 > arr[x, y] >= max_el * 0.95:
                    qimg_zone.setPixelColor(x, y, QColor(255, 40, 0, 255))
                elif max_el * 0.95 > arr[x, y] >= max_el * 0.80:
                    qimg_zone.setPixelColor(x, y, QColor(255, 80, 0, 255))
                elif max_el * 0.80 > arr[x, y] >= max_el * 0.85:
                    qimg_zone.setPixelColor(x, y, QColor(255, 120, 0, 255))
                elif max_el * 0.85 > arr[x, y] >= max_el * 0.70:
                    qimg_zone.setPixelColor(x, y, QColor(255, 150, 0, 255))
                # желтый
                elif max_el * 0.70 > arr[x, y] >= max_el * 0.65:
                    qimg_zone.setPixelColor(x, y, QColor(255, 170, 0, 255))
                elif max_el * 0.65 > arr[x, y] >= max_el * 0.60:
                    qimg_zone.setPixelColor(x, y, QColor(255, 190, 0, 255))
                elif max_el * 0.60 > arr[x, y] >= max_el * 0.55:
                    qimg_zone.setPixelColor(x, y, QColor(255, 210, 0, 255))
                elif max_el * 0.55 > arr[x, y] >= max_el * 0.50:
                    qimg_zone.setPixelColor(x, y, QColor(255, 230, 0, 255))
                elif max_el * 0.50 > arr[x, y] >= max_el * 0.45:
                    qimg_zone.setPixelColor(x, y, QColor(255, 255, 0, 255))
                # салатовый
                elif max_el * 0.45 > arr[x, y] >= max_el * 0.475:
                    qimg_zone.setPixelColor(x, y, QColor(230, 255, 0, 255))
                elif max_el * 0.475 > arr[x, y] >= max_el * 0.450:
                    qimg_zone.setPixelColor(x, y, QColor(210, 255, 0, 255))
                elif max_el * 0.450 > arr[x, y] >= max_el * 0.425:
                    qimg_zone.setPixelColor(x, y, QColor(180, 255, 0, 255))
                elif max_el * 0.425 > arr[x, y] >= max_el * 0.400:
                    qimg_zone.setPixelColor(x, y, QColor(150, 255, 0, 255))
                # зеленый
                elif max_el * 0.400 > arr[x, y] >= max_el * 0.39:
                    qimg_zone.setPixelColor(x, y, QColor(100, 255, 0, 255))
                elif max_el * 0.39 > arr[x, y] >= max_el * 0.38:
                    qimg_zone.setPixelColor(x, y, QColor(70, 255, 0, 255))
                elif max_el * 0.38 > arr[x, y] >= max_el * 0.37:
                    qimg_zone.setPixelColor(x, y, QColor(40, 255, 0, 255))
                elif max_el * 0.37 > arr[x, y] >= max_el * 0.36:
                    qimg_zone.setPixelColor(x, y, QColor(10, 255, 0, 255))
                elif max_el * 0.36 > arr[x, y] >= max_el * 0.35:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 0, 255))

                # голубой
                elif max_el * 0.35 > arr[x, y] >= max_el * 0.245:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 40, 255))
                elif max_el * 0.245 > arr[x, y] >= max_el * 0.240:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 80, 255))
                elif max_el * 0.240 > arr[x, y] >= max_el * 0.235:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 100, 255))
                elif max_el * 0.235 > arr[x, y] >= max_el * 0.23:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 120, 255))
                elif max_el * 0.23 > arr[x, y] >= max_el * 0.225:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 150, 255))
                elif max_el * 0.225 > arr[x, y] >= max_el * 0.22:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 210, 255))
                elif max_el * 0.22 > arr[x, y] >= max_el * 0.215:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 240, 255))
                elif max_el * 0.215 > arr[x, y] >= max_el * 0.21:
                    qimg_zone.setPixelColor(x, y, QColor(0, 255, 255, 255))

                # темно-голубой
                elif max_el * 0.21 > arr[x, y] >= max_el * 0.19:
                    qimg_zone.setPixelColor(x, y, QColor(0, 220, 255, 255))
                elif max_el * 0.19 > arr[x, y] >= max_el * 0.18:
                    qimg_zone.setPixelColor(x, y, QColor(0, 210, 255, 255))
                elif max_el * 0.18 > arr[x, y] >= max_el * 0.17:
                    qimg_zone.setPixelColor(x, y, QColor(0, 200, 255, 255))
                elif max_el * 0.17 > arr[x, y] >= max_el * 0.16:
                    qimg_zone.setPixelColor(x, y, QColor(0, 190, 255, 255))
                elif max_el * 0.16 > arr[x, y] >= max_el * 0.15:
                    qimg_zone.setPixelColor(x, y, QColor(0, 160, 255, 255))
                elif max_el * 0.15 > arr[x, y] >= max_el * 0.14:
                    qimg_zone.setPixelColor(x, y, QColor(0, 150, 255, 255))
                #     синий
                elif max_el * 0.14 > arr[x, y] >= max_el * 0.13:
                    qimg_zone.setPixelColor(x, y, QColor(0, 130, 255, 255))
                elif max_el * 0.13 > arr[x, y] >= max_el * 0.125:
                    qimg_zone.setPixelColor(x, y, QColor(0, 110, 255, 255))
                elif max_el * 0.125 > arr[x, y] >= max_el * 0.115:
                    qimg_zone.setPixelColor(x, y, QColor(0, 90, 255, 255))
                elif max_el * 0.115 > arr[x, y] >= max_el * 0.11:
                    qimg_zone.setPixelColor(x, y, QColor(0, 70, 255, 255))
                elif max_el * 0.11 > arr[x, y] >= max_el * 0.108:
                    qimg_zone.setPixelColor(x, y, QColor(0, 50, 255, 255))
                elif max_el * 0.108 > arr[x, y] >= max_el * 0.107:
                    qimg_zone.setPixelColor(x, y, QColor(0, 40, 255, 255))
                elif max_el * 0.107 > arr[x, y] >= max_el * 0.106:
                    qimg_zone.setPixelColor(x, y, QColor(0, 30, 255, 255))
                elif max_el * 0.106 > arr[x, y] >= max_el * 0.102:
                    qimg_zone.setPixelColor(x, y, QColor(0, 20, 255, 255))
                elif max_el * 0.102 > arr[x, y] >= max_el * 0.101:
                    qimg_zone.setPixelColor(x, y, QColor(0, 0, 255, 255))
        return qimg_zone


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
pyqt5 pyside2
  • 1 个回答
  • 23 Views
Martin Hope
Konstantin
Asked: 2022-08-17 17:47:37 +0000 UTC

发送和接收长客户端-服务器列表[关闭]

  • 0
关闭 这个问题是题外话。目前不接受回复。

该问题是由不再复制的问题或错字引起的。虽然类似的问题可能与本网站相关,但该问题的解决方案不太可能帮助未来的访问者。通常可以通过在发布问题之前编写和研究一个最小程序来重现问题来避免此类问题。

3 个月前关闭。

改进问题

有一个很长的清单。如何保证将其发送到服务器并取回?我已经尝试过对数据进行切片)对于客户端,使用变量 var = 8000,不会完整返回列表...

服务器代码:

import socketserver

class ThredingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass

class EchoTCPHandler(socketserver.BaseRequestHandler):

    def handle(self):
        def recvall(request):
            BUFF_SIZE = 4096  # 4 KiB
            data = b''
            while True:
                part = request.recv(BUFF_SIZE)
                data += part
                if len(part) < BUFF_SIZE:
                    break
            return data

        full_data = recvall(self.request)
        print(f'Adress: {self.client_address[0]}')
        print(f'Data: {len(full_data)} {full_data}')
        # некая операция
        #d = eval(full_data)
        #d = d[::-1]

        msg = str(full_data).encode()
        self.request.sendall(msg)

if __name__ == '__main__':
    with ThredingTCPServer(('', 8888), EchoTCPHandler) as server:
        server.serve_forever()

客户端代码:

import socket


def recvall(sock):
    BUFF_SIZE = 4096 # 4 KiB
    data = b''
    while True:
        part = sock.recv(BUFF_SIZE)
        data += part
        if len(part) < BUFF_SIZE:
            break
    return data


var = 8000
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 8888))
msg = str([i*i for i in range(var)]).encode()
sock.send(msg)
res = recvall(sock)
ans = res.decode()
print(len(ans), ans)
sock.close()
python сокет
  • 2 个回答
  • 67 Views
Martin Hope
Konstantin
Asked: 2022-07-28 22:19:12 +0000 UTC

设置 pcolormesh matplotlib

  • 0

excel(data25.xls)中有数据,我正在尝试基于它们构建图表。事实证明不是很好......即。由于最大值是2969,而且下降的很快,所以整个颜色网格都在最大值附近(saved_figure.png),基本上整个图都是蓝色的,不好...

我这样构建图表:

import xlwings as xw
import matplotlib.pyplot as plt
 
def get_row_col_index(sheet):
    'Индексы для диапазона что бы забрать данные'
    row = 0
    col = 0
    # find col
    for i in range(1, 5000):
        val = sheet.range((1, i)).value
        if val == None:
            col = (1, i - 1)
            break
    # find row
    for i in range(1, 5000):
        val = sheet.range((i, 1)).value
        if val == None:
            row = (i - 1, 1)
            break
 
    return row, col
 
def get_data_in_excel(row: tuple, col: tuple) -> list:
    val = sheet.range((2, 2), (row[0], col[1])).options(
        ndim=2).value  # с 2 - т.к. нужно ислючить размерность длины по X, Y
    return val
 
wb = xw.Book(f'data25.xls')
sheet = wb.sheets['Лист1']
 
row, col = get_row_col_index(sheet)
val = get_data_in_excel(row, col)
 
plt.imshow(val, cmap='jet', interpolation = 'bicubic', vmax=0.5)
plt.show()
# plt.savefig('saved_figure.png')

我得到: 资源

我想得到这样的东西: 想要的

数据:excel链接

PS。所需的图表是从基于相同 excel 数据的另一个程序中获得的。

python python-3.x
  • 1 个回答
  • 59 Views
Martin Hope
Konstantin
Asked: 2022-06-18 21:53:21 +0000 UTC

如何从字符串中提取一部分并对其应用条件?

  • 0

有这样的数据:

数据

从他们那里,我可以提取联系人姓名(或者更确切地说,甚至是单独的名字和姓氏):

SELECT
    C.contactname,
    SUBSTRING(C.contactname, 1, CHARINDEX(', ', C.contactname) - 1) AS Lastname,
    SUBSTRING(C.contactname,
                 CHARINDEX(' ', C.contactname) + 1,
                 LEN(C.contactname) - CHARINDEX(' ', C.contactname)) AS Firstname
FROM [Sales].[Customers] AS C

现在如何在这里应用一个条件来排除那些以“M”开头的名字(名字)?(如迈克尔等)

sql
  • 0 个回答
  • 0 Views
Martin Hope
Konstantin
Asked: 2022-09-09 03:34:46 +0000 UTC

渐变线

  • 0

是否可以绘制一个不单调但带有渐变的 QPolygon。我的代码:

from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from PyQt5.QtGui import QPen,QPainter, QPolygon, QRadialGradient, QBrush, QColor
from PyQt5.QtCore import QPoint, Qt


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = "PyQt5 Drawing Polygon"
        self.width = 900
        self.height = 900
        self.InitWindow()

    def InitWindow(self):
        self.setWindowTitle(self.title)
        self.setGeometry(0,0, self.width, self.height)
        self.show()

    def paintEvent(self, event):
        painter = QPainter(self)
        gradient = QRadialGradient(50, 50, 50, 50, 50)
        gradient.setColorAt(0, QColor.fromRgbF(100, 125, 0, 0.5))
        gradient.setColorAt(1, QColor.fromRgbF(0, 255, 0, 0.5))
        brush = QBrush(gradient)
        pen = QPen(brush, 50, Qt.SolidLine)
        pen.setJoinStyle(Qt.RoundJoin)
        pen.setCapStyle(Qt.RoundCap)
        painter.setPen(pen)

        points = QPolygon([
            QPoint(80,80),
            QPoint(80,500),
            QPoint(500,80),
            QPoint(500,500)
        ])

        painter.drawPolyline(points)

App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())

所需结果的示例(如果可能的话......):

绘制 =)

pyqt5
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-08-27 16:04:37 +0000 UTC

使 QTableWidget 的第一列永久可见(固定在滚动上)

  • 1

有一张宽大的桌子。如何使滚动的第一列始终可见?

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.table_data = QtWidgets.QTableWidget(1, 20, self)
        self.setCentralWidget(self.table_data)


app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

问题可视化

python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-08-21 14:23:20 +0000 UTC

用虚线构建图形的一部分

  • 0

有这样一张图:

import matplotlib.pyplot as plt
 
y=[5, 5, 4, 4, 3, 3]
x=[0, 1, 1, 2, 2, 3]
 
plt.plot(x, y)
plt.show()

如何让它不是用一条线构建,而是用中断来构建,可以这么说(我不知道它是如何正确调用的,所以我用油漆画了它)? 在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-24 20:15:18 +0000 UTC

如何为闪存驱动器上的 bat 文件创建快捷方式

  • 1

如何为闪存驱动器上的 bat 文件创建快捷方式?我在 python 文件夹中的闪存驱动器上安装了嵌入式 python,将我的 gui.py 脚本(PyQt5 上的 GUI)放在那里并创建了一个 .bat 文件来运行它:

@echo off
%CD%\python.exe gui.pyw %*
@pause

屏幕

如何制作一个可以启动.bat的快捷方式?

屏幕2

python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-23 22:16:46 +0000 UTC

QSqlTableModel 将 BLOB 文件从数据库转储到 PDF

  • 1

数据库以BLOB.

选择单元格并按下“下载文件...”按钮时,如何从数据库中卸载此文件?(代码旁边应该是test_BLOB.pdf)

最小的例子:

import sys
import os
from PySide2 import QtSql
from PySide2 import QtWidgets
from PySide2 import QtCore


class Storage_app(QtWidgets.QMainWindow):

    def __init__(self, parent=None) -> None:
        super().__init__()
        self.createConnection()
        self.fillTable()  # !!! тестовое заполнение базы данных
        self.createModel()
        self.initUI()

        self.centralWidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralWidget)
        btn_save = QtWidgets.QPushButton("Скачать файл из БД")
        btn_save.clicked.connect(self.save_file)
        layout = QtWidgets.QVBoxLayout(self.centralWidget)
        layout.addWidget(self.view)
        layout.addWidget(btn_save)

        if not parent:
            self.show()

    def save_file(self):
        print("Как сохранить этот файл из базы данных? =(")

    def createConnection(self):
        self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("local_base.db")  # !!! .db
        if not self.db.open():
            print("Cannot establish a database connection")
            return False

    def fillTable(self):
        """
        Вспомогательная функция заполнениия базы данных
        Отключить после тестового запуска
        """
        file_path = (f"{os.getcwd()}\\test_BLOB.pdf")
        test_BLOB = self.convertToBinaryData(file_path)
        test_BLOB = QtCore.QByteArray(test_BLOB)

        self.db.transaction()
        q = QtSql.QSqlQuery()
        #
        q.exec_("DROP TABLE IF EXISTS company;")
        q.exec_("CREATE TABLE company ("
                "id INT PRIMARY KEY, "
                "name_company TEXT NOT NULL, "
                "blob_data BLOB NOT NULL );")

        # Вставка тестовых значений
        query = QtSql.QSqlQuery()
        query.prepare("INSERT INTO company (id, name_company, blob_data) "
                      "VALUES (:id, :name_company, :blob_data)")

        query.bindValue(":id", 1)
        query.bindValue(":name_company", 'АО КОПЫТА')
        query.bindValue(":blob_data", test_BLOB)
        query.exec_()

        query = QtSql.QSqlQuery()
        query.prepare("INSERT INTO company (id, name_company, blob_data) "
                      "VALUES (:id, :name_company, :blob_data)")

        query.bindValue(":id", 2)
        query.bindValue(":name_company", 'АО РОГА')
        query.bindValue(":blob_data", test_BLOB)
        query.exec_()

        self.db.commit()

    def createModel(self):
        """
        Создание модели для отображения
        """
        self.model = QtSql.QSqlRelationalTableModel()
        self.model.setTable("company")
        self.model.setHeaderData(0, QtCore.Qt.Horizontal, "id")
        self.model.setHeaderData(1, QtCore.Qt.Horizontal, "Наиманование")
        self.model.setHeaderData(2, QtCore.Qt.Horizontal, "Документы")
        self.model.select()

    def initUI(self):
        self.view = QtWidgets.QTableView()
        self.view.setModel(self.model)
        mode = QtWidgets.QAbstractItemView.SingleSelection
        self.view.setSelectionMode(mode)


    def closeEvent(self, event):
        if (self.db.open()):
            self.db.close()

    def convertToBinaryData(self, file_path):
        # Конвертирование в BLOB
        with open(file_path, 'rb') as file:
            blobData = file.read()
        return blobData


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle('Fusion')
    w = Storage_app()
    app.exec_()

在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-22 20:05:13 +0000 UTC

QSqlRelationalTableModel 禁用编辑列

  • 2

如何QSqlRelationalTableModel防止编辑表格的列?例如,有两个表格category,equipment如何禁用id表格category和Category表格中列的编辑equipment?

最小的例子:

import sys
from PyQt5 import QtSql
from PyQt5.Qt import *

class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        self.createConnection()
        self.fillTable()  # !!!
        self.createModel()
        self.initUI()

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        self.table_box = QComboBox()
        self.table_box.addItems(["Оборудование", "Категории"])
        self.table_box.activated[str].connect(self.table_select)


        layout = QVBoxLayout(self.centralWidget)
        layout.addWidget(self.view)
        layout.addWidget(self.table_box)

    def createConnection(self):
        self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("test_1318914.db")  # !!! .db
        if not self.db.open():
            print("Cannot establish a database connection")
            return False

    def fillTable(self):
        self.db.transaction()
        q = QtSql.QSqlQuery()
        #                             vvvvvvvv
        q.exec_("DROP TABLE IF EXISTS category;")
        q.exec_("CREATE TABLE category (id INT PRIMARY KEY, catname TEXT);")
        q.exec_("INSERT INTO category VALUES (1, 'Расходники');")
        q.exec_("INSERT INTO category VALUES (2, 'Носители');")

        #                             vvvv
        q.exec_("DROP TABLE IF EXISTS equipment;")
        q.exec_("CREATE TABLE equipment (Name TEXT, Quantity INT, Category INT);")
        q.exec_("INSERT INTO equipment VALUES ('Барабан для принтера', 8, 1);")
        q.exec_("INSERT INTO equipment VALUES ('Бумага для принтера', 3, 1);")
        q.exec_("INSERT INTO equipment VALUES ('Дискета', 10, 2);")
        self.db.commit()

    def createModel(self):
        self.model = QtSql.QSqlRelationalTableModel()
        self.model.setTable("equipment")
        self.model.select()

    def initUI(self):
        self.view = QTableView()
        self.view.setModel(self.model)
        self.view.setColumnWidth(0, 150)
        mode = QAbstractItemView.SingleSelection
        self.view.setSelectionMode(mode)

    def table_select(self, text):
        if text == 'Категории':
            self.model.setTable("category")
            self.model.select()
        elif text == 'Оборудование':
            self.model.setTable("equipment")
            self.model.select()

    def closeEvent(self, event):
        if (self.db.open()):
            self.db.close()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Example()
    w.setWindowTitle("No edit")
    w.resize(430, 250)
    w.show()

在此处输入图像描述

我意识到我需要创建自己的继承类QSqlRelationalTableModel并覆盖该方法flags......我试图重做 Qt 示例,但它不起作用 =( 所有表都变得不可编辑。

python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-21 17:17:25 +0000 UTC

过滤多个表 QSqlTableModel

  • 1

有две桌子category和equipment。
我正在尝试为他们制作一个过滤器,但事实证明equipment它可以在其中工作,
但category不能在...... =(

最小的例子:

import re
import sys
from PyQt5 import QtSql
from PyQt5.Qt import *

class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        self.createConnection()
        self.fillTable()  # !!!
        self.createModel()
        self.initUI()

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        self.table_box = QComboBox()
        self.table_box.addItems(["Оборудование", "Категории"])
        self.table_box.activated[str].connect(self.table_select)
        search_str = QLineEdit()
        search_str.setPlaceholderText("Введите строку поиска")
        search_str.textChanged.connect(self.update_filter)

        layout = QVBoxLayout(self.centralWidget)
        layout.addWidget(self.view)
        layout.addWidget(self.table_box)
        layout.addWidget(search_str)

    def createConnection(self):
        self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("test_1318914.db")  # !!! .db
        if not self.db.open():
            print("Cannot establish a database connection")
            return False

    def fillTable(self):
        self.db.transaction()
        q = QtSql.QSqlQuery()
        #                             vvvvvvvv
        q.exec_("DROP TABLE IF EXISTS category;")
        q.exec_("CREATE TABLE category (id INT PRIMARY KEY, catname TEXT);")
        q.exec_("INSERT INTO category VALUES (1, 'Расходники');")
        q.exec_("INSERT INTO category VALUES (2, 'Носители');")

        #                             vvvv
        q.exec_("DROP TABLE IF EXISTS equipment;")
        q.exec_("CREATE TABLE equipment (Name TEXT, Quantity INT, Category INT);")
        q.exec_("INSERT INTO equipment VALUES ('Барабан для принтера', 8, 1);")
        q.exec_("INSERT INTO equipment VALUES ('Бумага для принтера', 3, 1);")
        q.exec_("INSERT INTO equipment VALUES ('Дискета', 10, 2);")
        self.db.commit()

    def createModel(self):
        self.model = QtSql.QSqlRelationalTableModel()
        self.model.setTable("equipment")
        self.model.select()

    def initUI(self):
        self.view = QTableView()
        self.view.setModel(self.model)
        self.view.setColumnWidth(0, 150)
        mode = QAbstractItemView.SingleSelection
        self.view.setSelectionMode(mode)


    def update_filter(self, text):
        if self.table_box.currentText() == 'Категории':
            s = re.sub("[\W_]+", "", text)
            filter_str = 'FROM category WHERE catname LIKE "%{}%"'.format(s)
            self.model.setFilter(filter_str)
        elif self.table_box.currentText() == 'Оборудование':
            s = re.sub("[\W_]+", "", text)
            filter_str = 'Name LIKE "%{}%"'.format(s)
            self.model.setFilter(filter_str)

    def table_select(self, text):
        if text == 'Категории':
            self.model.setTable("category")
            self.model.select()
        elif text == 'Оборудование':
            self.model.setTable("equipment")
            self.model.select()

    def closeEvent(self, event):
        if (self.db.open()):
            self.db.close()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Example()
    w.setWindowTitle("Search")
    w.resize(430, 250)
    w.show()
    sys.exit(app.exec_())

Действия:

  1. 我运行示例,出现一个视图窗口:

在此处输入图像描述

  1. 我输入QLineEdit例如“Ba”,他选择了正确的:

在此处输入图像描述

  1. 切换到“类别”:

在此处输入图像描述

  1. 当您尝试在“类别”表中搜索时,它不会搜索 =(

在此处输入图像描述

python
  • 2 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-19 02:41:00 +0000 UTC

在相关表中编译 SQL 删除查询

  • 0

共有三张表:company(公司)、department(部门)、subdivision(细分)。请帮我写一个这样的查询:删除id = 2的公司“Hooves”,因为没有这样的公司,然后分别删除id_company = 2的部门,对于每个要删除的部门,删除所有子部门。

在此处输入图像描述

例如,我想出了如何从链接表中删除DELETE FROM Department WHERE id_company = 2,但是如何删除要删除的部门的细分(细分)?

BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "Company" (
    "id"    INTEGER,
    "name_company"  TEXT
);
CREATE TABLE IF NOT EXISTS "Department" (
    "id"    INTEGER,
    "id_company"    INTEGER,
    "name department"   TEXT
);
CREATE TABLE IF NOT EXISTS "Subdivision" (
    "id"    INTEGER,
    "id_department" INTEGER,
    "name_sub"  TEXT
);
INSERT INTO "Company" VALUES (1,'Рога');
INSERT INTO "Company" VALUES (2,'Копыта');
INSERT INTO "Company" VALUES (3,'Енот');
INSERT INTO "Department" VALUES (1,2,'Отдел копыт');
INSERT INTO "Department" VALUES (2,1,'Отдел рогов');
INSERT INTO "Department" VALUES (3,3,'Енотный отдел');
INSERT INTO "Subdivision" VALUES (1,1,'Рога и нетолько');
COMMIT;
sql
  • 3 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-17 02:38:39 +0000 UTC

如何使用数据库中的数据填充 QCombobox

  • 1

我有一个包含两个表good和category.
通过QSqlRelationalTableModel表格的可视化,用值good替换列来实现。Сategorycatnameid

按下按钮时btnAdd = QPushButton("&Добавить запись"),在数据库中实现了一条记录在一个表中good,填写时需要指明该记录属于哪个记录(以后会正常工作)。id categoryQSqlRelationalTableModel

如何代替self.line_edit_category QCombobox表格中的数据,category以便清楚用户输入的内容。

比如一个下拉列表,让用户不能输入错误的东西:

在此处输入图像描述

import sys
from PyQt5 import QtSql
from PyQt5.Qt import *


class Dialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Input Dialog')
        self.line_edit_name = QLineEdit()
        self.line_edit_quantity = QLineEdit()
        self.line_edit_category = QLineEdit()

        form_layout = QFormLayout()
        form_layout.addRow('Name:', self.line_edit_name)
        form_layout.addRow('quantity:', self.line_edit_quantity)
        form_layout.addRow('category:', self.line_edit_category)

        button_box = QDialogButtonBox(
            QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)

        main_layout = QVBoxLayout(self)
        main_layout.addLayout(form_layout)
        main_layout.addWidget(button_box)


class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        self.createConnection()
        self.fillTable()  # !!!
        self.createModel()
        self.initUI()

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        btnAdd = QPushButton("&Добавить запись")
        btnAdd.clicked.connect(self.addRecord)
        btnDel = QPushButton("&Удалить запись")
        btnDel.clicked.connect(self.delRecord)

        layout = QVBoxLayout(self.centralWidget)
        layout.addWidget(self.view)
        layout.addWidget(btnAdd)
        layout.addWidget(btnDel)

    def createConnection(self):
        self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("test_1318914.db")  # !!! .db
        if not self.db.open():
            print("Cannot establish a database connection")
            return False

    def fillTable(self):
        self.db.transaction()
        q = QtSql.QSqlQuery()
        #                             vvvvvvvv
        q.exec_("DROP TABLE IF EXISTS category;")
        q.exec_("CREATE TABLE category (id INT PRIMARY KEY, catname TEXT);")
        q.exec_("INSERT INTO category VALUES (1, 'Расходники');")
        q.exec_("INSERT INTO category VALUES (2, 'Носители');")

        #                             vvvv
        q.exec_("DROP TABLE IF EXISTS good;")
        q.exec_("CREATE TABLE good (Name TEXT, Quantity INT, Category INT);")
        q.exec_("INSERT INTO good VALUES ('Барабан для принтера', 8, 1);")
        q.exec_("INSERT INTO good VALUES ('Бумага для принтера', 3, 1);")
        q.exec_("INSERT INTO good VALUES ('Дискета', 10, 2);")
        self.db.commit()

    def createModel(self):
        self.model = QtSql.QSqlRelationalTableModel()
        self.model.setTable("good")
        self.model.setHeaderData(0, Qt.Horizontal, "Название")
        self.model.setHeaderData(1, Qt.Horizontal, "Кол-во")
        self.model.setHeaderData(2, Qt.Horizontal, "Категория")
        self.set_relation()
        self.model.select()

    def initUI(self):
        self.view = QTableView()
        self.view.setModel(self.model)
        self.view.setColumnWidth(0, 150)
        mode = QAbstractItemView.SingleSelection
        self.view.setSelectionMode(mode)

    def closeEvent(self, event):
        if (self.db.open()):
            self.db.close()

    def set_relation(self):
        self.model.setRelation(2, QtSql.QSqlRelation(
            "category",
            "id",
            "catname"
        ))

    def addRecord(self):
        inputDialog = Dialog()
        rez = inputDialog.exec()
        if not rez:
            msg = QMessageBox.information(self, 'Внимание', 'Диалог сброшен.')
            return

        name = inputDialog.line_edit_name.text()
        quantity = inputDialog.line_edit_quantity.text()
        category = inputDialog.line_edit_category.text()
        if (not name) or (not quantity) or (not category):
            msg = QMessageBox.information(self,
                                          'Внимание', 'Заполните пожалуйста все поля.')
            return

        r = self.model.record()
        r.setValue(0, name)
        r.setValue(1, int(quantity))
        r.setValue(2, int(category))

        self.model.insertRecord(-1, r)
        self.model.select()

    def delRecord(self):
        row = self.view.currentIndex().row()
        if row == -1:
            msg = QMessageBox.information(self,
                                          'Внимание', 'Выберите запись для удаления.')
            return

        name = self.model.record(row).value(0)
        quantity = self.model.record(row).value(1)
        category = self.model.record(row).value(2)

        inputDialog = Dialog()
        inputDialog.setWindowTitle('Удалить запись ???')
        inputDialog.line_edit_name.setText(name)
        inputDialog.line_edit_quantity.setText(str(quantity))
        inputDialog.line_edit_category.setText(str(category))
        rez = inputDialog.exec()
        if not rez:
            msg = QMessageBox.information(self, 'Внимание', 'Диалог сброшен.')
            return

        self.model.setRelation(2, QtSql.QSqlRelation())
        self.model.select()
        self.model.removeRow(row)
        self.set_relation()
        self.model.select()

        msg = QMessageBox.information(self, 'Успех', 'Запись удалена.')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Example()
    w.setWindowTitle("QRelationalSqlTableModel")
    w.resize(430, 250)
    w.show()
    sys.exit(app.exec_())
python
  • 2 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-16 03:26:29 +0000 UTC

如何通过 sender() 找出没有文本的信号的按钮发送者?

  • 1

通常我一直使用示例来识别发件人按钮:

import sys
from PySide2.QtWidgets import QMainWindow, QPushButton, QApplication

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        btn1 = QPushButton("Button 1", self)
        btn1.move(30, 50)

        btn2 = QPushButton("Button 2", self)
        btn2.move(150, 50)

        btn1.clicked.connect(self.buttonClicked)
        btn2.clicked.connect(self.buttonClicked)

        self.statusBar()

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Event sender')
        self.show()


    def buttonClicked(self):

        sender = self.sender()
        print(sender)
        self.statusBar().showMessage(sender.text() + ' was pressed')


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

但是我有这样一个问题,如果
btn1 = QPushButton("", self)和btn1 = QPushButton("", self),
如何理解按下了哪个按钮?

在此处输入图像描述

python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-07 21:23:24 +0000 UTC

显示 BLOB 文件的 QSqlTableModel

  • 0

有一个表格,其中除了通常的信息外,还以表格形式存储了PDF文档,BLOB以问号的形式显示如下:

在此处输入图像描述

如何让这些“问号”更人性化?(我想在那里放一些图标或其他东西,否则我立即期待用户的问题:“这些问号是什么?”)

最小示例(在代码文件旁边,您需要放置任何名为test_BLOB.jpg的文件,以便可以转换为BLOB):

import sys
import os
from PySide2 import QtSql
from PySide2 import QtWidgets
from PySide2 import QtCore


class Storage_app(QtWidgets.QMainWindow):

    def __init__(self, parent=None) -> None:
        super().__init__()
        self.createConnection()
        self.fillTable()  # !!! тестовое заполнение базы данных
        self.createModel()
        self.initUI()

        self.centralWidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralWidget)
        layout = QtWidgets.QVBoxLayout(self.centralWidget)
        layout.addWidget(self.view)

        if not parent:
            self.show()

    def createConnection(self):
        self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("local_base.db")  # !!! .db
        if not self.db.open():
            print("Cannot establish a database connection")
            return False

    def fillTable(self):
        """
        Вспомогательная функция заполнениия базы данных
        Отключить после тестового запуска
        """
        file_path = (f"{os.getcwd()}\\test_BLOB.jpg")
        test_BLOB = self.convertToBinaryData(file_path)
        test_BLOB = QtCore.QByteArray(test_BLOB)

        self.db.transaction()
        q = QtSql.QSqlQuery()
        #
        q.exec_("DROP TABLE IF EXISTS company;")
        q.exec_("CREATE TABLE company ("
                "id INT PRIMARY KEY, "
                "name_company TEXT NOT NULL, "
                "blob_data BLOB NOT NULL );")

        # Вставка тестовых значений
        query = QtSql.QSqlQuery()
        query.prepare("INSERT INTO company (id, name_company, blob_data) "
                      "VALUES (:id, :name_company, :blob_data)")

        query.bindValue(":id", 1)
        query.bindValue(":name_company", 'АО КОПЫТА')
        query.bindValue(":blob_data", test_BLOB)
        query.exec_()

        query = QtSql.QSqlQuery()
        query.prepare("INSERT INTO company (id, name_company, blob_data) "
                      "VALUES (:id, :name_company, :blob_data)")

        query.bindValue(":id", 2)
        query.bindValue(":name_company", 'АО РОГА')
        query.bindValue(":blob_data", test_BLOB)
        query.exec_()

        self.db.commit()

    def createModel(self):
        """
        Создание модели для отображения
        """
        self.model = QtSql.QSqlRelationalTableModel()
        self.model.setTable("company")
        self.model.setHeaderData(0, QtCore.Qt.Horizontal, "id")
        self.model.setHeaderData(1, QtCore.Qt.Horizontal, "Наиманование")
        self.model.setHeaderData(2, QtCore.Qt.Horizontal, "Документы")
        self.model.select()

    def initUI(self):
        self.view = QtWidgets.QTableView()
        self.view.setModel(self.model)
        mode = QtWidgets.QAbstractItemView.SingleSelection
        self.view.setSelectionMode(mode)


    def closeEvent(self, event):
        if (self.db.open()):
            self.db.close()

    def convertToBinaryData(self, file_path):
        # Конвертирование в BLOB
        with open(file_path, 'rb') as file:
            blobData = file.read()
        return blobData


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle('Fusion')
    w = Storage_app()
    app.exec_()
python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-09-04 20:00:47 +0000 UTC

如何将 BLOB 文件插入数据库 QtSql.QSqlQuery()

  • 2

使用以下方法将数据插入数据库QtSql.QSqlQuery():

query = QSqlQuery()
query.prepare("INSERT INTO person (id, forename, surname) "
              "VALUES (:id, :forename, :surname)")
query.bindValue(":id", 1001)
query.bindValue(":forename", "Bart")
query.bindValue(":surname", "Simpson")
query.exec_()

问题:如果数据如何插入BLOB?

如果可能的话,一个小例子。我从逻辑上理解需要翻译成什么BLOB,然后插入一个变量......

最小的例子:

from PySide2 import QtSql
import os

def convertToBinaryData(file_path):
    # Конвертирование в BLOB
    with open(file_path, 'rb') as file:
        blobData = file.read()
        print()
    return blobData


def createConnection():
    db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName("local_base.db")  # !!! .db
    if not db.open():
        print("Cannot establish a database connection")
        return False
    return db

# Получим данные BLOB
# картинка test_BLOB.jpg рядом с файлом скрипта
file_path = (f"{os.getcwd()}\\test_BLOB.jpg")
test_BLOB = convertToBinaryData(file_path)

db = createConnection()
db.transaction()
q = QtSql.QSqlQuery()
q.exec_("DROP TABLE IF EXISTS company;")
q.exec_("CREATE TABLE company ("
        "id INT PRIMARY KEY, "
        "name_company TEXT NOT NULL, "
        "blob_data BLOB NOT NULL );")

# Вставка тестовых значений

query = QtSql.QSqlQuery()
query.prepare("INSERT INTO company (id, name_company, blob_data) "
              "VALUES (:id, :name_company, :blob_data)")
query.bindValue(":id", 1)
query.bindValue(":name_company", 'АО КОПЫТА')
query.bindValue(":blob_data", test_BLOB)
query.exec_()

db.commit()


if __name__ == '__main__':
    print("Запуск")

idname_company它插入底座,但不插入BLOB。

python
  • 2 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-08-18 21:11:45 +0000 UTC

QSqlRelationalTableModel,书籍示例不起作用

  • 1

无法运行 Prohorenok 书中的示例。

不会添加或删除行。

也许有人会告诉我或写我自己的,我将非常感激。

from PyQt5 import QtCore, QtWidgets, QtSql
import sys

def addRecord():
    stm.insertRow(stm.rowCount())

def delRecord():
    stm.removeRow(tv.currentIndex().row())
    stm.select()

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("QRelationalSqlTableModel")
con = QtSql.QSqlDatabase.addDatabase('QSQLITE')
con.setDatabaseName('data.sqlite')
con.open()
stm = QtSql.QSqlRelationalTableModel(parent = window)
stm.setTable('good')
stm.setSort(1, QtCore.Qt.AscendingOrder)
# Задаем для поля категории связь с таблицей списка категорий
stm.setRelation(3, QtSql.QSqlRelation('category', 'id', 'catname'))
stm.select()
stm.setHeaderData(1, QtCore.Qt.Horizontal, 'Название')
stm.setHeaderData(2, QtCore.Qt.Horizontal, 'Кол-во')
stm.setHeaderData(3, QtCore.Qt.Horizontal, 'Категория')
vbox = QtWidgets.QVBoxLayout()
tv = QtWidgets.QTableView()
tv.setModel(stm)
tv.hideColumn(0)
tv.setColumnWidth(1, 150)
tv.setColumnWidth(2, 60)
tv.setColumnWidth(3, 150)
vbox.addWidget(tv)
btnAdd = QtWidgets.QPushButton("&Добавить запись")
btnAdd.clicked.connect(addRecord)
vbox.addWidget(btnAdd)
btnDel = QtWidgets.QPushButton("&Удалить запись")
btnDel.clicked.connect(delRecord)
vbox.addWidget(btnDel)
window.setLayout(vbox)
window.resize(430, 250)
window.show()
sys.exit(app.exec_())

应该是结果: 结果

python
  • 1 个回答
  • 10 Views
Martin Hope
Konstantin
Asked: 2022-08-06 18:51:00 +0000 UTC

图像上的颜色图

  • 2

请告诉我,显示颜色图如何最好地应用于图像会更好吗?

例如,我有一个 400 x 400 test.png 的图像,我通过 plt 显示它,然后我在 pcolor 上绘制了一个 alpha = 0.25 的颜色图,但它并没有按照我想要的方式进行......图片不清晰可见,连同颜色条(好像它不是一个 Alpha 通道,而是某种混合),加上某种网格 =(

import matplotlib.pyplot as plt
 
image = plt.imread('test.png')
plt.imshow(image)
vals = []
for i in range(0,200):
    if i <50:
        val_list = [2]*200
    elif i <100:
        val_list = [5]*200
    elif i <150:
        val_list = [10]*200
    vals.append(val_list)
plt.pcolor(vals, cmap=plt.get_cmap('jet', 11), alpha = 0.25)
plt.colorbar()
plt.show()

资源

结果

我试着把图片200的大小改成200,不行=( 在此处输入图像描述

python
  • 1 个回答
  • 10 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