初级菜鸟,用python做了个小工具,但是做不下去了,需要指点迷津?

描述

我现在有这个界面,目前实现了以下功能:

1、品类实现了数据库中提取数据,并显示了。

2、图片展示,点击浏览选择本地图片,在左边显示,目前达到的效果是点击缩放按钮,图片放大缩小。

相关代码

pic.py

# -*- coding: utf-8 -*-

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


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_addpicForm(object):
    def setupUi(self, addpicForm):
        addpicForm.setObjectName("addpicForm")
        addpicForm.resize(400, 360)
        self.addpiclabel = QtWidgets.QLabel(addpicForm)
        self.addpiclabel.setGeometry(QtCore.QRect(140, 20, 120, 16))
        self.addpiclabel.setAlignment(QtCore.Qt.AlignCenter)
        self.addpiclabel.setObjectName("addpiclabel")
        self.picnamelineEdit = QtWidgets.QLineEdit(addpicForm)
        self.picnamelineEdit.setGeometry(QtCore.QRect(280, 170, 110, 30))
        self.picnamelineEdit.setObjectName("picnamelineEdit")
        self.picnamelabel = QtWidgets.QLabel(addpicForm)
        self.picnamelabel.setGeometry(QtCore.QRect(280, 140, 110, 20))
        self.picnamelabel.setAlignment(QtCore.Qt.AlignCenter)
        self.picnamelabel.setObjectName("picnamelabel")
        self.widget = QtWidgets.QWidget(addpicForm)
        self.widget.setGeometry(QtCore.QRect(60, 50, 281, 55))
        self.widget.setObjectName("widget")
        self.addpicgridLayout = QtWidgets.QGridLayout(self.widget)
        self.addpicgridLayout.setContentsMargins(0, 0, 0, 0)
        self.addpicgridLayout.setObjectName("addpicgridLayout")
        self.piccategorylabel = QtWidgets.QLabel(self.widget)
        self.piccategorylabel.setAlignment(QtCore.Qt.AlignCenter)
        self.piccategorylabel.setObjectName("piccategorylabel")
        self.addpicgridLayout.addWidget(self.piccategorylabel, 0, 0, 1, 1)
        self.picbrandlabel = QtWidgets.QLabel(self.widget)
        self.picbrandlabel.setAlignment(QtCore.Qt.AlignCenter)
        self.picbrandlabel.setObjectName("picbrandlabel")
        self.addpicgridLayout.addWidget(self.picbrandlabel, 0, 1, 1, 1)
        self.picspeclabel = QtWidgets.QLabel(self.widget)
        self.picspeclabel.setAlignment(QtCore.Qt.AlignCenter)
        self.picspeclabel.setObjectName("picspeclabel")
        self.addpicgridLayout.addWidget(self.picspeclabel, 0, 2, 1, 1)
        self.piccategorycomboBox = QtWidgets.QComboBox(self.widget)
        self.piccategorycomboBox.setObjectName("piccategorycomboBox")
        self.addpicgridLayout.addWidget(self.piccategorycomboBox, 1, 0, 1, 1)
        self.picbrandcomboBox = QtWidgets.QComboBox(self.widget)
        self.picbrandcomboBox.setObjectName("picbrandcomboBox")
        self.addpicgridLayout.addWidget(self.picbrandcomboBox, 1, 1, 1, 1)
        self.picspeccomboBox = QtWidgets.QComboBox(self.widget)
        self.picspeccomboBox.setObjectName("picspeccomboBox")
        self.addpicgridLayout.addWidget(self.picspeccomboBox, 1, 2, 1, 1)
        self.widget1 = QtWidgets.QWidget(addpicForm)
        self.widget1.setGeometry(QtCore.QRect(290, 240, 95, 100))
        self.widget1.setObjectName("widget1")
        self.addpicverticalLayout = QtWidgets.QVBoxLayout(self.widget1)
        self.addpicverticalLayout.setContentsMargins(0, 0, 0, 0)
        self.addpicverticalLayout.setObjectName("addpicverticalLayout")
        self.picbrowsepushButton = QtWidgets.QPushButton(self.widget1)
        self.picbrowsepushButton.setObjectName("picbrowsepushButton")
        self.addpicverticalLayout.addWidget(self.picbrowsepushButton)
        self.addpicpushButton = QtWidgets.QPushButton(self.widget1)
        self.addpicpushButton.setObjectName("addpicpushButton")
        self.addpicverticalLayout.addWidget(self.addpicpushButton)
        self.widget2 = QtWidgets.QWidget(addpicForm)
        self.widget2.setGeometry(QtCore.QRect(10, 110, 268, 231))
        self.widget2.setObjectName("widget2")
        self.picviewgridLayout = QtWidgets.QGridLayout(self.widget2)
        self.picviewgridLayout.setContentsMargins(0, 0, 0, 0)
        self.picviewgridLayout.setObjectName("picviewgridLayout")
        self.picbigpushButton = QtWidgets.QPushButton(self.widget2)
        self.picbigpushButton.setObjectName("picbigpushButton")
        self.picviewgridLayout.addWidget(self.picbigpushButton, 0, 0, 1, 1)
        self.picsmallpushButton = QtWidgets.QPushButton(self.widget2)
        self.picsmallpushButton.setObjectName("picsmallpushButton")
        self.picviewgridLayout.addWidget(self.picsmallpushButton, 0, 1, 1, 1)
        self.addpicgraphicsView = QtWidgets.QGraphicsView(self.widget2)
        self.addpicgraphicsView.setObjectName("addpicgraphicsView")
        self.picviewgridLayout.addWidget(self.addpicgraphicsView, 1, 0, 1, 2)

        self.retranslateUi(addpicForm)
        QtCore.QMetaObject.connectSlotsByName(addpicForm)

    def retranslateUi(self, addpicForm):
        _translate = QtCore.QCoreApplication.translate
        addpicForm.setWindowTitle(_translate("addpicForm", "Form"))
        self.addpiclabel.setText(_translate("addpicForm", "请添加产品图片"))
        self.picnamelabel.setText(_translate("addpicForm", "请输入图片名称"))
        self.piccategorylabel.setText(_translate("addpicForm", "品类"))
        self.picbrandlabel.setText(_translate("addpicForm", "品牌"))
        self.picspeclabel.setText(_translate("addpicForm", "规格"))
        self.picbrowsepushButton.setText(_translate("addpicForm", "浏览..."))
        self.addpicpushButton.setText(_translate("addpicForm", "添加"))
        self.picbigpushButton.setText(_translate("addpicForm", "图片放大"))
        self.picsmallpushButton.setText(_translate("addpicForm", "图片缩小"))

main.py

import sqlite3
import sys
import cv2


from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import *
from PyQt5.Qt import QPixmap, QPoint, Qt, QPainter, QIcon


from pic import Ui_addpicForm


conn = sqlite3.connect('toexcel.sqlite')
cur = conn.cursor()



# 添加图片界面
class PicWindow(QMainWindow, Ui_addpicForm):
    def __init__(self):
        super(PicWindow, self).__init__()
        self.scene = None
        self.item = None
        self.zoomscale = 1   # 图片缩放尺度
        self.setupUi(self)

        #self.addpicpushButton.clicked.connect(self.add_pic)
        # 图片放大缩小按钮信号槽
        self.picbigpushButton.clicked.connect(self.big_click)
        self.picsmallpushButton.clicked.connect(self.small_click)

        self.picbrowsepushButton.clicked.connect(self.openpic)

        self.piccategorycomboBox.setPlaceholderText("请选择品类!")
        self.picbrandcomboBox.setPlaceholderText("请选择品牌!")
        self.picspeccomboBox.setPlaceholderText("请选择规格!")


        select_category = 'select category_name from category'
        cur.execute(select_category)
        category_list = []
        datas = cur.fetchall()
        print(datas)
        for data in datas:
            category_list.append(data[0])
        self.piccategorycomboBox.addItems(category_list)



        index_temp = self.piccategorycomboBox.currentIndex() + 1  # 读取下拉框内容的索引ID
        category_data_index = index_temp
        print(category_data_index)
        print(category_list)



        a = 'select category_id from brand'
        cur.execute(a)
        b_list = []
        b_datas = cur.fetchall()
        print(b_datas)
        for data in b_datas:
            b_list.append(data[0])
        #self.picbrandcomboBox.addItems(b_list)
        print(b_list)
        index_temp_b = self.picbrandcomboBox.currentIndex() + 1  # 读取下拉框内容的索引ID
        b_data_index = index_temp_b
        print(b_data_index)



    def openpic(self):

        # select image file and open it
        # :return:

        imgFile = QFileDialog.getOpenFileName(self, "Open Image File", "", "All Files(*);;*.jpg;;*.png;;*.jpeg")
        #print(imgFile)
        img = cv2.imread(imgFile[0])   # 读取图片
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)   # 转换图像通道
        x = img.shape[1]    # 获取图片大小
        y = img.shape[0]
        z = x * 3
        frame = QImage(img, x, y, z, QImage.Format_RGB888)
        pix = QPixmap.fromImage(frame)
        self.item = QGraphicsPixmapItem(pix)   # 创建像素图元
        self.scene = QGraphicsScene()      # 创建场景
        self.scene.addItem(self.item)
        self.addpicgraphicsView.setScene(self.scene)     # 将场景添加至视图

    def big_click(self):
        """
        used to enlarge image
        :return:
        """
        self.zoomscale = self.zoomscale + 0.05
        if self.zoomscale >= 1.2:
            self.zoomscale = 1.2
        self.item.setScale(self.zoomscale)   # 放大图片

    def small_click(self):
        """
        used to reduce image
        :return:
        """
        self.zoomscale = self.zoomscale - 0.05
        if self.zoomscale <= 0:
            self.zoomscale = 0.2
        self.item.setScale(self.zoomscale)    # 缩小图片


def main():
    app = QApplication(sys.argv)
    controller = PicWindow()
    controller.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
    cur.close()

创建表的SQL语句

-- category definition

CREATE TABLE "category" (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    category_name TEXT
);


-- spec definition

CREATE TABLE spec (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    spec_name INTEGER
);


-- unit definition

CREATE TABLE unit (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    unit_name TEXT
);


-- brand definition

CREATE TABLE brand (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    brand_name TEXT,
    category_id INTEGER,
    CONSTRAINT BRAND_FK FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE ON UPDATE CASCADE
);

数据的SQL语句

INSERT INTO brand (brand_name,category_id) VALUES
     ('东鹏',1),
     ('马可波罗',1),
     ('索菲亚',2),
     ('索菲亚',3),
     ('蒙娜丽莎',1),
     ('金意陶',1),
     ('简一',1),
     ('欧神诺',1),
     ('冠珠',1),
     ('新中源',1);
INSERT INTO brand (brand_name,category_id) VALUES
     ('诺贝尔',1),
     ('宏宇',1),
     ('鹰牌陶瓷',1),
     ('冠军',1),
     ('博德',1),
     ('欧派',2),
     ('司米',2),
     ('志邦',2),
     ('金牌',2),
     ('欧派',3);
INSERT INTO brand (brand_name,category_id) VALUES
     ('志邦',3),
     ('金牌',3),
     ('我乐家居',3),
     ('好莱客',3),
     ('红苹果',3);
INSERT INTO category (category_name) VALUES
     ('瓷砖'),
     ('橱柜'),
     ('衣柜'),
     ('灶具');
INSERT INTO spec (spec_name) VALUES
     (600 * 600);
INSERT INTO unit (unit_name) VALUES
     ('块'),
     ('片'),
     ('平方米');

有很多问题需要大神详细讲解一下

1、从数据库中提取数据,品类和品牌实现联动。

2、初始图片按比例缩小显示在框中,不使用缩放按钮缩放,使用鼠标滚轮实现缩放。

3、在按添加按钮,将品类、品牌、规格、图片名称及图片,都存到数据库中,图片直接存到数据库中,不保存在本地。

阅读 2.1k
1 个回答

声明一下,没用过py开发过桌面应用,讲述的方法理论均是前端和后端java的综合见解
1、从数据库中提取数据,品类和品牌实现联动。
实现联动,这块采用的是几个列表进行联动,比如选择品牌时,监听选择事件然后对品牌列表的赋值操作
2、初始图片按比例缩小显示在框中,不使用缩放按钮缩放,使用鼠标滚轮实现缩放。
使用鼠标滚轮实现缩放,这里应该是用到了鼠标监听事件,方法和缩放按钮一样调用就行了,做到高内聚低耦合的就行
3、在按添加按钮,将品类、品牌、规格、图片名称及图片,都存到数据库中,图片直接存到数据库中,不保存在本地。
图片存储一般都是存储到服务器上,数据库中只能存指定的类型,这个自行学习一下说多了你这边也不定,简单的就是,图片传到某个服务器(计算机上)会返回一个图片地址链接,将链接存放到数据库中

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题