PYQT的最新界面代码

2023-10-27

# This Python file uses the following encoding: utf-8
import sqlite3
import traceback
from PyQt5.QtGui import QMouseEvent, QCursor, QIcon, QBrush, QColor
from LoginUi import *
from IntermainUI import *
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAbstractItemView, QMessageBox, QHeaderView, QTableWidgetItem, \
    QAction, QMenu, QComboBox
from PyQt5.QtCore import Qt, QPoint
import pandas as pd
from pandas.core.frame import DataFrame


open_path = '/share/project/share/GUI/ECD.csv'
save_path = '/share/project/share/GUI/ECD.csv'

# 禁止滑轮滚动进行选择
class CustomComboBox(QComboBox):
    def wheelEvent(self, event):
        event.ignore()

class LoginWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_LoginWindow()
        self.ui.setupUi(self)
        # 设置为无边框的界面
        # self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.ui.pushButton_L_ok.clicked.connect(self.login_in)
        self.ui.pushButton_L_ok.setShortcut('Return')  # 设置快捷键
        self.show()

    def login_in(self):
        # 获取登录用户和密码
        username = self.ui.lineEdit_L_username.text()
        password = self.ui.lineEdit_L_password.text()
        # # sql语句,判断数据库中是否拥有这账号和密码
        # sql = 'select user_id, password, authority from user where user_id=? and password=? and authority=?'
        # cursor.execute(sql, (username, password, self.authority))
        # # 获取一致的部分,存在表示输入正确,不存在提示错误
        # data = cursor.fetchall()
        # # 账号和密码不为空时候,才进入

        # if username == "znchen" and password =="znchen":
        if username == "123456" and password == "123456":
            self.win = MainWindow()
            self.close()
        else:
            print("wrong!")

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_flag = True
            self.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标

    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:
            self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置
            QMouseEvent.accept()

    def mouseReleaseEvent(self, QMouseEvent):
        self.m_flag = False
        self.setCursor(QCursor(Qt.ArrowCursor))

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton_Save.clicked.connect(self.Saveinfos)
        # # 禁止双击编辑单元格
        # self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
        # # 选择一行
        # self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
        # 添加右击菜单
        self.ui.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.ui.tableWidget.customContextMenuRequested.connect(self.create_rightmenu)
        self.show_info()

        # self.ui.tableWidget.itemClicked.connect(self.chooseInfo)
        # 设置为无边框的界面
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        # self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.show()

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_flag = True
            self.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标

    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:
            self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置
            QMouseEvent.accept()

    def mouseReleaseEvent(self, QMouseEvent):
        self.m_flag = False
        self.setCursor(QCursor(Qt.ArrowCursor))

    def Saveinfos(self):
        # path = '/share/project/share/GUI/ECD.csv'
        data = pd.read_csv(open_path, dtype = {'Num':str})
        self.ui.tableWidget.setColumnCount(data.shape[1])
        self.ui.tableWidget.setRowCount(data.shape[0])

        for i in range(data.shape[0]):
            for j in range(data.shape[1]):
                # self.ui.tableWidget.setItem(i, j, QTableWidgetItem(str(data.iloc[i, j])))
                infosss = self.ui.tableWidget.item(i, j).text()
                print(infosss)
                data.iat[i, j] = infosss
        print(data)
        data.to_csv(save_path, encoding='utf-8', index=False)
        self.reload_all_infos()
        QMessageBox.information(self, '提示', 'Save Successfully')

    def add_newinfo(self):
        # path = '/share/project/share/GUI/ECD.csv'
        data = pd.read_csv(open_path, dtype={'Num': str})
        new_row = pd.Series({}, dtype=object)
        data1 = pd.concat([data, new_row], ignore_index=True)
        data1.to_csv(save_path, encoding='utf-8', index=False)
        self.reload_all_infos()

    def show_info(self):
        # file_path = '/share/project/share/GUI/ECD Engagement Tracking.xlsx'
        # data = pd.read_excel(file_path, sheet_name='0605')
        # excel_path = '/share/project/share/GUI/ECD.xlsx'
        # data = pd.read_excel(excel_path, sheet_name='0605')
        # path = '/share/project/share/GUI/ECD.csv'
        data = pd.read_csv(open_path, dtype = {'Num':str})
        self.ui.tableWidget.setColumnCount(data.shape[1])
        self.ui.tableWidget.setRowCount(data.shape[0])
        self.ui.tableWidget.setAlternatingRowColors(True)
        self.ui.tableWidget.setStyleSheet("QTableView::item:alternate { background-color: #e0ebff; }")

        for i in range(data.shape[0]):
            for j in range(data.shape[1]):
                self.ui.tableWidget.setItem(i, j, QTableWidgetItem(str(data.iloc[i, j])))

                if j == 2:
                    infosss = self.ui.tableWidget.item(i, j).text()
                    items1 = ["Service", "AmazeFP", "AmazeSys-Physical", "Tweaker", "AmazeDRCLite", "IndustrialLM", " "]
                    p = items1.index(infosss)
                    self.combo_box = CustomComboBox(self)
                    self.combo_box.addItems(items1)
                    self.combo_box.setCurrentIndex(p)
                    self.ui.tableWidget.setCellWidget(i, j, self.combo_box)
                    self.ui.tableWidget.setItem(i, j, )



                if j == 3:
                    infosss = self.ui.tableWidget.item(i, j).text()
                    items2 = ["Kick-off", "Accomplished", "On going", "Not Started", " "]
                    p = items2.index(infosss)
                    self.combo_box = CustomComboBox(self)
                    self.combo_box.addItems(items2)
                    self.combo_box.setCurrentIndex(p)
                    self.ui.tableWidget.setCellWidget(i, j, self.combo_box)

                if j == 4:
                    infosss = self.ui.tableWidget.item(i, j).text()
                    items3 = ["Normal", "Good", "Need Attention", "Not Good", "-", " "]
                    p = items3.index(infosss)
                    self.combo_box = CustomComboBox(self)
                    self.combo_box.addItems(items3)
                    self.combo_box.setCurrentIndex(p)
                    self.ui.tableWidget.setCellWidget(i, j, self.combo_box)
                    # if infosss == "Need Attention":
                        # item = self.ui.tableWidget.item(i, j)
                        # print(item)
                        # item.setBackground(QBrush(QColor(255,0,0)))


        # 展示列表行索引
        self.ui.tableWidget.setHorizontalHeaderLabels(data.columns)


    def reload_all_infos(self):
        self.show_info()

    # 右键菜单
    def create_rightmenu(self):
        # 菜单对象
        self.groupBox_menu = QMenu(self)
        self.actionA = QAction(QIcon(), u'添加数据', self)
        self.actionA.setShortcut('Ctrl+S')  # 设置快捷键
        self.groupBox_menu.addAction(self.actionA)
        self.actionB = QAction(QIcon(), u'删除数据', self)
        self.groupBox_menu.addAction(self.actionB)
        self.actionA.triggered.connect(self.button)  # 将动作A触发时连接到槽函数 button
        self.actionB.triggered.connect(self.button_2)
        self.groupBox_menu.popup(QCursor.pos())  # 声明当鼠标在groupBox控件上右击时,在鼠标位置显示右键菜单

    def button(self):
        # 按钮1槽函数,进行数据保存
        # 添加数据
        Num = ' '
        Account = ' '
        EngageContent = ' '
        TechnicalStatus = ' '
        TechnicalTrend = ' '
        StartDate = ' '
        EndDateEstimated = ' '
        EndDateActual = ' '
        Sales = ' '
        ECDname = ' '
        Comment = ' '

        infos = pd.DataFrame({'Num': [Num], 'Account': [Account], 'Engage Content': [EngageContent],
                              'Technical Status': [TechnicalStatus],
                              'Technical Trend': [TechnicalTrend], 'Start Date': [StartDate],
                              'Estimated \nEnd Date': [EndDateEstimated],
                              'Actual\nEnd Date': [EndDateActual], 'Sales': [Sales], 'ECD Engineer(s) Name': [ECDname],
                              'Comment': [Comment]
                              })

        if "" in infos:
            print('Wrong')
            QMessageBox.information(self, '提示', '输入信息不能为空')
        else:
            infos = DataFrame(infos)
            # path = '/share/project/share/GUI/ECD.csv'
            data = pd.read_csv(open_path, dtype={'Num': str})
            data1 = pd.concat([data, infos], ignore_index=True)
            # print(data1)
            data1.to_csv(save_path, encoding='utf-8', index=False)
            self.reload_all_infos()
            QMessageBox.information(self, '提示', 'Add Successfully')


    def button_2(self):
        # 按钮2槽函数,删除数据
        # file_path = '/share/project/share/GUI/ECD.csv'
        data1 = pd.read_csv(open_path, dtype = {'Num':str})
        info_index = self.ui.tableWidget.currentIndex().row()
        infos_delete = data1.drop(data1.index[info_index])
        infos_delete.to_csv(save_path, encoding='utf-8', index = False)
        self.reload_all_infos()
        QMessageBox.information(self, '提示', 'Delete Successfully')



if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = LoginWindow()
    sys.exit(app.exec_())

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PYQT的最新界面代码 的相关文章

  • 如何使用表单上的按钮向 QTabWidget 添加选项卡?

    我决定为我的脚本编写视觉形式 这个想法是有一个按钮可以将新选项卡添加到 QTabWidget 它不起作用 我找不到一个好的例子 我使用PyQt5 这是我尝试过的一部分 import sys from PyQt5 QtGui import Q
  • 如何实时返回鼠标坐标?

    我是 PyQt 的新手 我正在尝试使用它来创建一个实时返回鼠标位置的小部件 这是我所拥有的 import sys from PyQt5 QtWidgets import QWidget QToolTip QPushButton QAppli
  • 将内容添加到pyqt4滚动区域

    如何将内容添加到 pyqt4 中的滚动区域 我要自定义一个小部件吗 例如 如果我有一个数组或一个列表a 10 2 2 2 22 3 3 3 我应该如何在可滚动区域中显示变量 如果要将内容添加到滚动区域 则需要定义一个新的小部件并将其添加到滚
  • 为 python GUI 应用程序授予 root 权限以在 ubuntu 中运行命令

    现在 我有一个 python GUI 应用程序 需要使用 sudo 权限运行命令 如下所示 import commands iStat askpassPath commands getstatusoutput which ssh askpa
  • 如何在QWebEngineView中指定用户代理

    我正在使用 PyQt5 在网页上实现自动化功能 PyQt5 中显示的页面与 Chrome 中显示的页面有很大不同 如果我要更改用户代理 我可以模仿 Chrome 的功能吗 如果是这样 我将如何更改以下示例中的用户代理 import sys
  • 如何从 QListWidget 拖放到 ComboBox 中

    目标是能够将 ListWidget 项目拖放到组合框上 掉落的项目应添加到组合框中 理想情况下 我们希望避免读取 listWidget 的 currentItem 或 selectedItems 等的任何技巧 有想法吗 from PyQt4
  • PyQt 与 PySide 比较 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前在 Linux 上的 Qt 重型 C Python 环境中开发了许多应用程序 并根据需要移植到 PC Mac 我使用嵌入 C 中的 Pyt
  • PyQt 自动调整 qlineedit 字符间距

    我有一个 qlineedit 用户在其中输入验证码 我希望能够每隔 5 个字符自动间隔这些数字 就像激活自动添加破折号的窗口时一样 例如 12345 67890 12345 67890 如果位数是固定的 最好的选择是使用setInputMa
  • 如何使 QTreeWidget 中的特定列成为整数/浮点数,以便用户无法输入任何字母或符号而不是整数/浮点数?

    我正在 PyQt5 中使用 QTreeWidget 制作 GUI 我希望特定列仅是整数列 用户不应该能够在其中输入任何非整数项 我看到了一些使用 QVariant 的方法 但它似乎不能满足我的要求 这就是我的found https stac
  • 在 py2exe 编译的 Python 脚本中启用 QImage 的 JPEG 支持?

    我正在尝试通过 PyQt4 在 Python 脚本的 QImage 对象中使用 JPEG 图像 脚本本身工作完美 图像加载并且可以操作和渲染等等 但是 当我尝试使用 py2exe 编译 此脚本时 除了 JPEG 图像之外 一切正常 用等效的
  • 显示 python 的 XML 解析器加载大文件时的进度

    我使用 Python 内置的 XML 解析器来加载 1 5 gig XML 文件 这需要一整天的时间 from xml dom import minidom xmldoc minidom parse events xml 我需要知道如何进入
  • 多级QTreeView

    我很难理解如何使用 QTreeView 和 QStandardItemModel 设置多级 QTree 这是我所拥有的 from PySide QtGui import import sys class MainFrame QWidget
  • pyqt5调用url时处于无响应状态

    我刚刚在 pyqt 中实现了登录 但在调用 url 和获取响应之间 qt 窗口显示无响应状态 谁能建议我如何避免不响应状态 code class Login QDialog def init self height width parent
  • 将 PyQt5 QPixmap 转换为 numpy ndarray

    我有像素图 pixmap self screen grabWindow 0 self x self y self width self height 我想将其转换为 OpenCV 格式 我尝试将其转换为numpy ndarray如上所述he
  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • QTableView 中的虚拟列?

    我开始学习 Qt4 模型 视图编程 我有初学者问题 我有一个简单的应用程序 其中显示 sqlite 表QTableView class Model QtSql QSqlTableModel def init self parent None
  • 如何在PYQT中创建按钮点击

    我在 PyQT 中创建按钮单击时遇到了一些问题 当我创建如下按钮的点击时 这张图片无法保存 cv SetImageROI image pt1 0 pt1 1 pt2 0 pt1 0 int pt2 1 pt1 1 1 if self But
  • 替换主窗口中的 CentralWidget

    我对 PySide 有点陌生 我有一个主窗口对象 一次显示一个小部件 我一直在尝试更改中央小部件QMainWindow类 以便在按下按钮时替换窗口中可见的小部件 问题是按下的按钮是在 Widget 类中 而不是在主窗口类中 say clas
  • QFileDialog 作为 TableView 的编辑器:如何获取结果?

    我正在使用一个QFileDialog作为某些专栏的编辑QTableView 这基本上有效 对一些焦点问题取模 请参阅here https stackoverflow com questions 22854242 qfiledialog as
  • 如何从 QLineEdit 动态获取文本? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 怎样才能得到String Text from QlineEdit 我尝试过像这样 myArea getList 功能是获取字符串值并使用字符

随机推荐

  • 【正点原子STM32连载】第二十六章 TFTLCD(MCU屏)实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv
  • P1025 [NOIP2001 提高组] 数的划分(dfs搜有顺序)

    NOIP2001 提高组 数的划分 洛谷 include
  • 网络数据包的抓包(解析数据包内容)

    使用原始套接字接收 recvfrom reav read等 时 可以接收到完整的数据包 数据组装 拆解过程 数字代表上层协议的类型 完整数据包为 传输数据包内容 链路层包头 网络层包头 传输层包头 应用层数据 Ethernet MAC 封包
  • Python 面向对象(一)

    0 OOP Python面向对象 Python面向对象 面向对象编程 基础 公有私有 继承 组合 Mixin 魔法函数 魔法函数概述 构造类魔法函数 运算类魔法函数 1 面向对象概述 ObjectOriented OO OOP思想 接触到任
  • python每日一题

    写两个函数 分别求两个整数的最大公约数和最小公倍数 用主函数调用这两个函数 并输出结果两个整数由键盘输入 输入格式 两个数 输出格式 最大公约数 最小公倍数 样例输入 6 15 样例输出 3 30 注 gcd 最大公约数 lcm 最小公倍数
  • sql数据库中的 delete 与drop的区别

    数据库中的delete 与drop的区别 从下面的例子开始 delete delete from 表名 where 条件 drop alter table 表名 drop 字段 drop table 表 有的同学从从上面的例子 可以看出来
  • Java常用类:BigInteger和BigDecimal类

    目录 1 BigInteger类 2 BigDecimal类 1 BigInteger类 当需要很大的整数 long不够用时 可以使用BigInteger类来搞定 1 在对BigInteger 进行加减乘除时 需要使用对应的方法 2 可以创
  • .NET 6 VS2022连接WebService 生成代理客户端代码

    NET 6 VS2022连接WebService 生成代理客户端代码 VS2022安装 WCF Windows Communication Foundation 首先我们得安装WCF连接工具 搜索WCF并安装 安装完毕后启动VS2022 W
  • 华为OD机试真题- 递增字符串【2023Q1】【JAVA、Python、C++】

    题目描述 定义字符串完全由 A 和 B 组成 当然也可以全是 A 或全是 B 如果字符串从前往后都是以字典序排列的 那么我们称之为严格递增字符串 给出一个字符串s 允许修改字符串中的任意字符 即可以将任何的 A 修改成 B 也可以将任何的
  • [SHELL] shell 实现多进程后,如何等待所有进程结束

    1 gt 多进程实现 主要方法是使用 符号 将命令fork到后台执行 2 gt 等待结束的方法 2 1 使用 wait 命令 bin bash sleep 10 echo 1 gt gt s lock sleep 12 echo 1 gt
  • 计算机网络基础 1.0 -- 概述

    概念理解 报文 在网络中发送的数据块成为报文 在发送报文之前 通常会把数组分组 每个组都有个包头和数据组成 包头中包含了诸如目标地址和源地址等重要信息 这样才保证了数据能够有目的的在网络中的传输 主机是用户用来处理信息的 而路由器则是用来转
  • springboot 整合logback,设置日志的输出路径

    一 logback配置相对路径 项目实战中 配置成这种模式 打成jar包执行 生成的logs目录和jar包在同一目录下 即平级状态 1 1 配置成logs 查看效果 1 2 配置成 logs 1 配置成 logs 2 生成结果 工程所在磁盘
  • Win10 wsl-安装教程

    一 安装原生Win10 1 网上随便找一个win10版本 制作成U盘启动 并完成安装 2 安装原生的win10 上述方案安装的win10不是原生的 存在各种问题 进入win10操作系统 下载最新的 MediaCreationTool 工具
  • webpack-----前端必会高频面试题

    webpack学习总结 面试题 1 什么是webpack 静态模块打包工具 2 webpack作用 分析 压缩 打包代码 3 webpack好处 减少文件体积 减少文件数量 提高网页加载速度 4 webpack工作流程 1 初始化参数 从配
  • 一个人再牛,最终还是要靠团队

    软件行业个人英雄主义时代已经渐渐远去 在CS以及自由软件盛行的年代 确实造就了许多的软件英雄 如今的互联网 时代 我们只能去怀念他们 无论是创业还是软件平台的研发与运营 我们都在强调着团队 马云再牛 没有十八罗汉 他也只不过是一个到处吹牛到
  • 报错解决TypeError: write() argument must be str, not list

    今天写爬虫的时候遇到的问题 将抓取的数据保存下来的时候报错 TypeError write argument must be str not list 字面意思是write写入的应该是str类型的数据 而不是一个list类型的数据 回到代码
  • x264的参考帧管理机制

    x264介绍 X264是一款研究的是H 264编码的开源代码软件 相比JM而言 其编码性能有很大的提高 其支持大多数H 264的特性工具 包括 CABAC和 CAVLC高效嫡编码 多参考帧预测 所有的帧内预测宏块类型 16x6l和4x4 所
  • 官宣——BSV工程师能力认证项目在CSDN推出线上学习平台

    去年11月 上海可一澈科技有限公司 以下简称 可一科技 与CSDN联合推出了BSV区块链开发工程师能力认证项目 以下简称 BSV工程师认证 今天 BSV工程师认证项目正式推出一个全新的线上学习平台 并发布首门课程 比特币协议与设计 本次推出
  • LDO基础知识:噪声 - 降噪引脚如何提高系统性能

    使用低压降稳压器 LDO 来过滤开关模式电源产生的纹波电压并不是实现清洁直流电源的唯一考虑因素 由于 LDO 是电子器件 因此它们会自行产生一定量的噪声 选择低噪声 LDO 并采取措施来降低内部噪声对于生成不会影响系统性能的清洁电源轨而言不
  • PYQT的最新界面代码

    This Python file uses the following encoding utf 8 import sqlite3 import traceback from PyQt5 QtGui import QMouseEvent Q