凊风 发表于 2024-5-22 22:22:19

FishC 发表于 2024-5-22 17:49
当然可以!你可以使用Python的拼音库(比如pypinyin)来实现这个功能。下面是一个示例函数,可以实现将 ...

Pyside6中哪个控件可以插入照片?

FishC 发表于 2024-5-22 22:22:42

凊风 发表于 2024-05-22 22:22
Pyside6中哪个控件可以插入照片?

在PySide6中,你可以使用QLabel控件来插入照片。QLabel是一个可以显示文本和图像的控件。你可以使用setPixmap()方法来指定要显示的图片,并将其添加到主窗口或其他布局中。

下面是一个简单的示例代码,演示如何在PySide6中使用QLabel插入照片:

from PySide6.QtWidgets import QApplication, QMainWindow, QLabel
from PySide6.QtGui import QPixmap

app = QApplication([])

# 创建主窗口
window = QMainWindow()
window.setWindowTitle("Photo Viewer")

# 创建一个QLabel控件
label = QLabel(window)

# 加载图片,并设置给QLabel控件
pixmap = QPixmap("path/to/your/image.jpg")
label.setPixmap(pixmap)

# 调整窗口大小以适应图片
window.resize(pixmap.width(), pixmap.height())

# 显示窗口
window.show()

# 运行应用程序
app.exec()

你需要将`"path/to/your/image.jpg"`替换为你自己的图片路径。这样就可以在PySide6中插入照片了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 18:54:21

FishC 发表于 2024-5-22 22:22
在PySide6中,你可以使用QLabel控件来插入照片。QLabel是一个可以显示文本和图像的控件。你可以使用set ...

请问能否用Pyside6实现以下功能:
现E:/Temp下有若干个xlsx文件(文件名各不相同);

每个xlsx均只有3个sheet(sheet1、sheet2、sheet3):

其中每个xlsx的sheet2中都只有10 列(“类型”、“序号”、“姓名”、“性别”、“民族”、“身份证号码”、“年龄”、“与户主关系”、“户主联系电话”、“备注”)。

现需要将E:/Temp下的所有xlsx文件中的sheet2全部按文件名做为sheet名合并到“汇总表.xlsx”中。

FishC 发表于 2024-5-24 18:54:36

凊风 发表于 2024-05-24 18:54
请问能否用Pyside6实现以下功能:
现E:/Temp下有若干 ...

当然可以!你可以使用PySide6中的QFileDialog来选择需要合并的文件夹,然后使用openpyxl库来读取和写入Excel文件。下面是一个示例代码,实现了将E:/Temp文件夹下的所有xlsx文件的sheet2合并到一个汇总表中:

import os
import openpyxl
from PySide6.QtWidgets import QApplication, QFileDialog

# 选择文件夹
app = QApplication([])
folder_path = QFileDialog.getExistingDirectory(None, "选择文件夹", "E:/Temp")

# 创建汇总表
wb_summary = openpyxl.Workbook()
ws_summary = wb_summary.active

# 遍历文件夹下的xlsx文件
for filename in os.listdir(folder_path):
    if filename.endswith(".xlsx"):
      file_path = os.path.join(folder_path, filename)
      wb = openpyxl.load_workbook(file_path)

      # 合并sheet2到汇总表
      sheet2 = wb["sheet2"]
      for row in sheet2.iter_rows(min_row=2, values_only=True):
            ws_summary.append(row)

      wb.close()

# 保存汇总表
summary_file_path = os.path.join(folder_path, "汇总表.xlsx")
wb_summary.save(summary_file_path)
wb_summary.close()

这段代码会将E:/Temp文件夹下的所有xlsx文件的sheet2合并到一个名为"汇总表.xlsx"的文件中。请确保已经安装了openpyxl库。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 19:00:47

FishC 发表于 2024-5-24 18:54
当然可以!你可以使用PySide6中的QFileDialog来选择需要合并的文件夹,然后使用openpyxl库来读取和写入 ...

报错:
Traceback (most recent call last):
line 20, in <module>
    sheet2 = wb["sheet2"]
             ~~^^^^^^^^^^
File "D:\Python\pythonProject\.venv\Lib\site-packages\openpyxl\workbook\workbook.py", line 287, in __getitem__
    raise KeyError("Worksheet {0} does not exist.".format(key))
KeyError: 'Worksheet sheet2 does not exist.'

FishC 发表于 2024-5-24 19:01:08

凊风 发表于 2024-05-24 19:00
报错:
Traceback (most recent call last):
line...

这个错误是因为openpyxl库在读取工作簿时,通常将工作表的名称全部转换为小写。所以需要将`sheet2`改为小写的形式`sheet2.lower()`。

下面是修改后的代码:

import os
import openpyxl
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QFileDialog

def merge_xlsx_files(folder_path):
    # 创建一个空白的汇总表
    wb_merged = openpyxl.Workbook()
    sheet_merged = wb_merged.active
   
    for filename in os.listdir(folder_path):
      if filename.endswith('.xlsx'):
            file_path = os.path.join(folder_path, filename)
            wb = openpyxl.load_workbook(file_path)
            
            # 只处理sheet2
            sheet2 = wb['sheet2']
            
            for row in sheet2.iter_rows(min_row=2, values_only=True):
                sheet_merged.append(row)
   
    # 保存合并后的文件
    merged_file_path = '汇总表.xlsx'
    wb_merged.save(merged_file_path)
   
    print(f'合并完成!汇总表保存在{merged_file_path}')

# 弹出文件夹选择对话框
app = QApplication([])
window = QWidget()

layout = QVBoxLayout()
btn_select_folder = QPushButton('选择文件夹')
layout.addWidget(btn_select_folder)

window.setLayout(layout)
window.show()

def handle_select_folder():
    folder_path = QFileDialog.getExistingDirectory(window, '选择文件夹')
    merge_xlsx_files(folder_path)

btn_select_folder.clicked.connect(handle_select_folder)

app.exec()

请确保你的xlsx文件中的sheet2的名称是小写形式。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 19:14:24

FishC 发表于 2024-5-24 18:54
当然可以!你可以使用PySide6中的QFileDialog来选择需要合并的文件夹,然后使用openpyxl库来读取和写入 ...

我需要将每个xlsx名称命名为sheet名作为“汇总表.xlsx”的每一个sheet,

而不是简单地把所有xlsx的单元格数据合并到汇总表.xlsx的同一个sheet中。

FishC 发表于 2024-5-24 19:14:46

凊风 发表于 2024-05-24 19:14
我需要将每个xlsx名称命名为sheet名作为“汇总表.xlsx ...

非常抱歉,我之前理解错了你的需求。下面是根据你的要求修改后的代码:

import os
from PySide6.QtWidgets import QApplication, QFileDialog
from openpyxl import Workbook, load_workbook

# 选择文件夹
app = QApplication([])
file_path = QFileDialog.getExistingDirectory(None, "选择文件夹")

# 创建汇总表工作簿
summary_wb = Workbook()

# 遍历文件夹下的所有xlsx文件
for file_name in os.listdir(file_path):
    if file_name.endswith(".xlsx"):
      file_full_path = os.path.join(file_path, file_name)
      
      # 打开文件并获取sheet2
      wb = load_workbook(file_full_path)
      sheet2 = wb["Sheet2"]
      
      # 新建汇总表中的sheet,并将sheet2数据复制到汇总表中
      summary_sheet = summary_wb.create_sheet(title=file_name)# 使用文件名作为sheet名称
      for row in sheet2.iter_rows():
            summary_sheet.append()

# 删除默认创建的空白sheet
summary_wb.remove(summary_wb["Sheet"])

# 保存汇总表
summary_wb.save(os.path.join(file_path, "汇总表.xlsx"))

这段代码首先使用`QFileDialog`选择文件夹,然后遍历文件夹下的所有xlsx文件。对于每个文件,打开并读取其中的`Sheet2`,然后在汇总表工作簿中新建一个与文件名同名的sheet,并将`Sheet2`的数据复制到汇总表中相应的sheet中。最后保存汇总表为"汇总表.xlsx"。请确保你已经安装了`openpyxl`和`PySide6`库。

希望对你有所帮助!如有任何问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 19:21:24

FishC 发表于 2024-5-24 19:14
非常抱歉,我之前理解错了你的需求。下面是根据你的要求修改后的代码:




“汇总表.xlsx”中的sheet名不要带上xlsx后缀。

FishC 发表于 2024-5-24 19:21:49

凊风 发表于 2024-05-24 19:21
“汇总表.xlsx”中的sheet名不要带上xlsx后缀。

非常抱歉,我之前的回答有误。根据你的要求,我们可以使用`os.path.basename`函数获取xlsx文件名,并将其作为汇总表中每个sheet的名称。以下是修改后的代码:

import os
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QFileDialog
from openpyxl import load_workbook


class AssetManagementSystem(QWidget):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("资产管理系统")
      layout = QVBoxLayout()
      self.button = QPushButton("选择xlsx文件")
      self.button.clicked.connect(self.choose_file)
      layout.addWidget(self.button)
      self.setLayout(layout)

    def choose_file(self):
      file_dialog = QFileDialog()
      file_path, _ = file_dialog.getOpenFileName(self, "选择xlsx文件", "", "Excel files (*.xlsx)")
      if file_path:
            self.update_summary_table(file_path)

    def update_summary_table(self, file_path):
      workbook = load_workbook(file_path)
      sheet_name = os.path.basename(file_path).split('.')# 获取文件名并去除扩展名
      summary_workbook = load_workbook("汇总表.xlsx")
      if sheet_name in summary_workbook.sheetnames:
            summary_workbook.remove(summary_workbook)
      summary_sheet = summary_workbook.create_sheet(sheet_name)
      for sheet in workbook.sheetnames:
            source_sheet = workbook
            target_sheet = summary_sheet.copy_worksheet(source_sheet)
            target_sheet.title = sheet
      summary_workbook.save("汇总表.xlsx")


if __name__ == "__main__":
    app = QApplication([])
    window = AssetManagementSystem()
    window.show()
    app.exec()

这段代码会弹出一个窗口,你可以通过点击按钮来选择要处理的xlsx文件。当你选择了一个文件后,程序会将该文件的全部sheet添加到名为“汇总表.xlsx”的工作簿中,每个sheet都将作为一个单独的工作表。请确保在运行程序之前已经创建了一个名为“汇总表.xlsx”的空白工作簿。

希望这次回答对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 20:51:49

FishC 发表于 2024-5-24 19:14
非常抱歉,我之前理解错了你的需求。下面是根据你的要求修改后的代码:




能不能指定“汇总表.xlsx”的行高、列宽及单元格对齐方式。

FishC 发表于 2024-5-24 20:52:04

凊风 发表于 2024-05-24 20:51
能不能指定“汇总表.xlsx”的行高、列宽及单元格对齐 ...

当然可以!你可以使用Openpyxl库来操作Excel文件,以指定行高、列宽和单元格对齐方式。下面是一个示例代码:

from openpyxl import Workbook
from openpyxl.styles import Alignment

# 创建Workbook对象
wb = Workbook()

# 获取默认的活动工作表
ws = wb.active

# 设置行高
ws.row_dimensions.height = 30

# 设置列宽
ws.column_dimensions['A'].width = 20

# 设置单元格对齐方式
ws['A1'].alignment = Alignment(horizontal='center', vertical='center')

# 保存为文件
wb.save('汇总表.xlsx')

这段代码创建了一个Workbook对象,并将默认的活动工作表保存到"汇总表.xlsx"文件中。然后通过设置`row_dimensions`和`column_dimensions`属性来设置行高和列宽,通过设置`alignment`属性来设置单元格对齐方式。

你可以根据自己的需求修改行数、列数和对应的样式。希望这可以满足你的要求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 20:56:22

FishC 发表于 2024-5-24 20:52
当然可以!你可以使用Openpyxl库来操作Excel文件,以指定行高、列宽和单元格对齐方式。下面是一个示例 ...

如果要对某行、某列指定相应的行高和列宽呢?

FishC 发表于 2024-5-24 20:56:36

凊风 发表于 2024-05-24 20:56
如果要对某行、某列指定相应的行高和列宽呢?

如果你需要对某行或某列指定特定的行高和列宽,可以使用`worksheet.row_dimensions`和`worksheet.column_dimensions`来设置。下面是一个示例代码:

from openpyxl import Workbook

# 创建一个新的工作簿
workbook = Workbook()

# 选择当前活动的工作表
worksheet = workbook.active

# 设置行高
worksheet.row_dimensions.height = 20# 设置第一行行高为20
worksheet.row_dimensions.height = 30# 设置第二行行高为30

# 设置列宽
worksheet.column_dimensions['A'].width = 15# 设置A列宽度为15
worksheet.column_dimensions['B'].width = 25# 设置B列宽度为25

# 保存工作簿
workbook.save('汇总表.xlsx')

在上面的示例中,我们选择活动工作表,然后使用`row_dimensions`和`column_dimensions`属性来设置相应的行高和列宽。通过传入行号或列名作为索引,我们可以指定要更改的行或列。最后,我们保存工作簿。请根据你的需求进行相应的修改。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 20:58:54

FishC 发表于 2024-5-24 20:56
如果你需要对某行或某列指定特定的行高和列宽,可以使用`worksheet.row_dimensions`和`worksheet.colum ...

如果要把所有行的行高指定为20    所有列的列宽指定为30呢?

FishC 发表于 2024-5-24 20:59:06

凊风 发表于 2024-05-24 20:58
如果要把所有行的行高指定为20    所有列的列宽指定为 ...

你可以使用`worksheet.row_dimensions`和`worksheet.column_dimensions`来设置所有行的行高和所有列的列宽。下面是一个示例代码:

import openpyxl

# 打开工作簿
workbook = openpyxl.load_workbook('汇总表.xlsx')

# 选择第一个工作表
worksheet = workbook.active

# 遍历所有行,设置行高为20
for row in worksheet.iter_rows():
    for cell in row:
      cell.row_dimensions = 20

# 遍历所有列,设置列宽为30
for column in worksheet.columns:
    for cell in column:
      cell.column_dimensions = 30

# 保存修改后的工作簿
workbook.save('汇总表.xlsx')

这段代码将会把所有行的行高设置为20,所有列的列宽设置为30,并保存修改后的工作簿。注意,这里使用了`iter_rows()`和`columns`来遍历所有行和所有列。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-24 21:04:26

FishC 发表于 2024-5-24 20:59
你可以使用`worksheet.row_dimensions`和`worksheet.column_dimensions`来设置所有行的行高和所有列的 ...

报错:
Traceback (most recent call last):
line 39, in <module>
    cell.row_dimensions = 25
    ^^^^^^^^^^^^^^^^^^^
AttributeError: 'Cell' object has no attribute 'row_dimensions'

FishC 发表于 2024-5-24 21:04:37

凊风 发表于 2024-05-24 21:04
报错:
Traceback (most recent call last):
line 3 ...

抱歉,我之前给出的回答是错误的。`row_dimensions`和`column_dimensions`属性是用于整个工作表的,而不是对单个单元格进行设置的。

要将所有行的行高设置为20,可以使用`worksheet.row_dimensions`,如下所示:

import openpyxl

# 打开Excel文件
workbook = openpyxl.load_workbook('your_file.xlsx')

# 选择第一个工作表
worksheet = workbook['Sheet1']

# 遍历所有行,并设置行高为20
for row in worksheet.iter_rows():
    for cell in row:
      cell.row_dimensions = 20

# 保存更改
workbook.save('your_file.xlsx')

要将所有列的宽度设置为30,可以使用`worksheet.column_dimensions`,如下所示:

import openpyxl

# 打开Excel文件
workbook = openpyxl.load_workbook('your_file.xlsx')

# 选择第一个工作表
worksheet = workbook['Sheet1']

# 遍历所有列,并设置列宽为30
for column in worksheet.iter_cols():
    for cell in column:
      cell.column_dimensions.width = 30

# 保存更改
workbook.save('your_file.xlsx')

请注意,在遍历行或列时,我们将行高和列宽赋值给单元格的`row_dimensions`和`column_dimensions.width`属性,这样可以将更改应用于整个行或列。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-5-29 09:15:21

FishC 发表于 2024-5-24 21:04
抱歉,我之前给出的回答是错误的。`row_dimensions`和`column_dimensions`属性是用于整个工作表的,而 ...

请问为什么我用Pyside6的Ui转Py后,按钮的文本变为不是汉字了 ,请问需要怎么解决?

    def retranslateUi(self):
      self.setWindowTitle(QCoreApplication.translate("self", u"main", None))
      # if QT_CONFIG(tooltip)
      self.pushButton.setToolTip(
            QCoreApplication.translate("self", u"\u8bf7\u5f55\u5165\u201c\u6c47\u603b\u8868\u201d\u4e2d", None))
      # endif // QT_CONFIG(tooltip)
      self.pushButton.setText(
            QCoreApplication.translate("self", u"\u56fa\u5b9a\u8d44\u4ea7\u7ba1\u7406\u7cfb\u7edf", None))
      # if QT_CONFIG(tooltip)
      self.pushButton_2.setToolTip(
            QCoreApplication.translate("self", u"\u8bf7\u5f55\u5165\u201c\u6c47\u603b\u8868\u201d\u4e2d", None))
      # endif // QT_CONFIG(tooltip)
      self.pushButton_2.setText(
            QCoreApplication.translate("self", u"\u4eba\u529b\u8d44\u6e90\u7ba1\u7406\u7cfb\u7edf", None))
      self.label.setText(QCoreApplication.translate("self", u"\u7ba1\u7406\u7cfb\u7edf\u9009\u62e9", None))
      # if QT_CONFIG(tooltip)
      self.exit_button.setToolTip(
            QCoreApplication.translate("self", u"\u8bf7\u5f55\u5165\u201c\u6c47\u603b\u8868\u201d\u4e2d", None))
      # endif // QT_CONFIG(tooltip)
      self.exit_button.setText(QCoreApplication.translate("self", u"\u9000\u51fa", None))
      # retranslateUi

FishC 发表于 2024-5-29 09:15:28

凊风 发表于 2024-05-29 09:15
请问为什么我用Pyside6的Ui转Py后,按钮的文本变为不 ...

你遇到的问题是由于编码方式不同导致的。转换后的文本为Unicode转义字符,而不是实际的中文汉字。

要解决这个问题,你可以尝试使用UTF-8编码,或者直接将中文字符串作为参数传递给`setText()`方法。

例如:

self.pushButton.setText("固定资产管理系统")

或者:

self.pushButton.setText(u"固定资产管理系统")

这样就能正确显示中文汉字了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: 1 2 3 4 5 6 7 8 9 10 [11] 12
查看完整版本: 资产管理系统求教~~