首页 > 解决方案 > 每当我将此 python 脚本更改为可执行文件时,我的数据库文件都未连接到此应用程序

问题描述

# pylint: disable-all
import sys
from PySide2.QtWidgets import (
    QMainWindow,
    QApplication,
    QPushButton,
    QLabel,
    QLineEdit,
    QVBoxLayout,
    QTableWidget,
    QTableWidgetItem,
    QHeaderView,
    QGridLayout,
    QHBoxLayout,
    QMenuBar,
    QAction,
    QDialog,
    QAbstractItemView,
    QMenu,
)
from PySide2.QtCore import Qt, QRect, QCoreApplication
import sqlite3


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        conn = sqlite3.connect("database.db")
        self.c = conn.cursor()

        self.setWindowTitle("Shop")

        # Call the setup

        self.initGui()

    def initGui(self):
        self.dialog = QDialog()
        self.dialog.setModal(True)
        self.setCentralWidget(self.dialog)
        self.dialog.setFixedWidth(500)
        self.vbox = QGridLayout(self.dialog)

        label = QLabel()
        label.setText("Search by Item ID :")
        self.vbox.addWidget(label, 0, 0)
        self.ledit = QLineEdit()
        self.vbox.addWidget(self.ledit, 0, 1, 1, 3)

        LABELS = [("Item ID :", 3, 0), ("Article No. :", 4, 0), ("Brand :", 5, 0), ("Description : ", 6, 0), ("Company :", 7, 0), ("Company Code :", 8, 0)]
        self.labels = []
        for l in LABELS:
            label = QLabel()
            label.setText(l[0])
            label.setAlignment(Qt.AlignRight)
            self.vbox.addWidget(label, l[1], l[2])
            temp = QLabel()
            temp.setAlignment(Qt.AlignCenter)
            self.vbox.addWidget(temp, l[1], l[2] + 1, 1, 3)
            self.labels.append(temp)

        label = QLabel()
        label.setText("Quantity :")
        label.setAlignment(Qt.AlignCenter)
        self.vbox.addWidget(label, 2, 2)

        self.ledit2 = QLineEdit()
        self.ledit2.setFixedWidth(150)
        self.vbox.addWidget(self.ledit2, 2, 3)

        BTNS = [("Search", lambda: self.search(), 1, 0, 1, 4), ("Save", lambda: self.save(), 2, 0, 1, 2)]
        for btn in BTNS:
            button = QPushButton()
            button.setText(btn[0])
            button.clicked.connect(btn[1])
            self.vbox.addWidget(button, btn[2], btn[3], btn[4], btn[5])

    def save(self):
        try:
            if not self.ledit2.text() or not isinstance(int(self.ledit2.text()), int):
                return self.ledit2.setText("Quantity!")
            for i in range(len(self.labels)):
                if self.labels[i].text() == "" or self.labels[i].text() == "n/a":
                    return
                else:
                    with open("saved.csv", "a") as file:
                        file.write(self.labels[i].text() + ",")
            with open("saved.csv", "a") as file:
                file.write(self.ledit2.text() + "\n")
            self.ledit2.setText(self.ledit2.text() + " <<-- Saved")
        except ValueError:
            self.ledit2.setText("Quantity!")
        finally:
            lines = open("saved.csv", "r").readlines()
            lines_set = set(lines)
            out = open("saved.csv", "w")
            for line in lines_set:
                out.write(line)

    def search(self):
        try:
            results = self.c.execute("SELECT * FROM items WHERE id=:id", {"id": self.ledit.text()})
            r = results.fetchone()
            for i in range(len(r)):
                self.labels[i].setText(str(r[i]))
        except TypeError:
            for i in range(len(self.labels)):
                self.labels[i].setText("n/a")


if __name__ == "__main__":
    app = QApplication(sys.argv)

    win = Window()
    win.show()
    # win.showMaximized()

    sys.exit(app.exec_())

标签: python-3.xdatabasesqlite

解决方案


推荐阅读