鱼C论坛

 找回密码
 立即注册
楼主: 凊风

Pyside6求教20240414~~~

  [复制链接]
 楼主| 发表于 2024-4-17 22:35:25 | 显示全部楼层
FishC 发表于 2024-4-17 22:33
在代码中已经存储了区划代码,如果要根据区划代码获取对应的名称,你可以使用以下方法:1. 创建一个字 ...

已经有字典了啊,

就是《行政区划.xlsx》,

此工作簿一共有三列(级别、代码和名称),

用哪个命令可以把与代码对应的名称取出来呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 22:35:45 | 显示全部楼层
凊风 发表于 2024-04-17 22:35
已经有字典了啊,

就是《行政区划.xlsx》,

此 ...


如果你已经将行政区划数据存储在 Excel 工作簿中,并且使用字典进行代码与名称的映射,你可以使用 Python 的第三方库 `pandas` 来读取 Excel 数据并进行查询。以下是一个示例:

  1. import pandas as pd

  2. # 读取 Excel 文件
  3. data = pd.read_excel('行政区划.xlsx')

  4. # 将代码列作为索引,名称列作为值,创建字典
  5. code_to_name = dict(zip(data['代码'], data['名称']))

  6. # 使用区划代码来获取对应的名称
  7. selected_code = "110000"  # 假设要查询的区划代码是110000
  8. selected_name = code_to_name.get(selected_code)

  9. print(selected_name)  # 输出对应的名称
复制代码


在上述代码中,我们首先使用 `pandas` 的 `read_excel` 函数读取 Excel 文件,然后将代码列和名称列的数据转换为字典。之后,我们可以根据区划代码使用 `get` 方法从字典中获取对应的名称。

请确保在运行该代码之前,已经安装了 `pandas` 库(可以使用 `pip install pandas` 安装)。希望能对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-17 22:37:40 | 显示全部楼层
FishC 发表于 2024-4-17 22:35
如果你已经将行政区划数据存储在 Excel 工作簿中,并且使用字典进行代码与名称的映射,你可以使用 Pyth ...

我pandas库不能正常安装 ,能不能不要用pandas的命令?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 22:37:52 | 显示全部楼层
凊风 发表于 2024-04-17 22:37
我pandas库不能正常安装 ,能不能不要用pandas的命令 ...


当然可以!如果你无法正常安装 `pandas` 库,你可以考虑使用 Python 内置的 `openpyxl` 库来读取 Excel 文件并进行查询。下面是一个不使用 `pandas` 的示例代码:

  1. from openpyxl import load_workbook

  2. # 加载 Excel 文件
  3. workbook = load_workbook('行政区划.xlsx')

  4. # 选择要操作的工作表(假设在第一个工作表)
  5. sheet = workbook.active

  6. # 创建一个空字典用于存储代码和名称的映射关系
  7. code_to_name = {}

  8. # 遍历每一行,将代码和名称添加到字典中
  9. for row in sheet.iter_rows(values_only=True):
  10.     code_to_name[row[1]] = row[2]

  11. # 使用区划代码来获取对应的名称
  12. selected_code = "110000"  # 假设要查询的区划代码是110000
  13. selected_name = code_to_name.get(selected_code)

  14. print(selected_name)  # 输出对应的名称
复制代码


请确保在运行以上代码之前,已经安装了 `openpyxl` 库(可以使用 `pip install openpyxl` 安装)。

这样你就能够读取 Excel 文件,并且将代码和名称存储在一个字典中。然后,你可以使用区划代码从字典中获取对应的名称。希望这个方法对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-17 22:50:06 | 显示全部楼层
FishC 发表于 2024-4-17 22:37
当然可以!如果你无法正常安装 `pandas` 库,你可以考虑使用 Python 内置的 `openpyxl` 库来读取 Excel ...

我的self.folder_path是E:/Temp

file_path = os.path.join(self.folder_path, "行政区划.xlsx")

构造出来的怎么是E:/Temp\行政区划.xlsx?

这要怎么解决?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 22:50:18 | 显示全部楼层
凊风 发表于 2024-04-17 22:50
我的self.folder_path是E:/Temp

file_path = os.pa ...


这是因为在Windows系统中,反斜杠(`\`)通常用作路径的分隔符。所以在你构造文件路径时,`os.path.join()` 函数会自动将斜杠(`/`)转义为反斜杠(`\`)。如果你想要使用正斜杠(`/`)而不是反斜杠(`\`),你可以使用原始字符串(raw string)来表示路径。具体解决方法如下:

  1. import os

  2. self.folder_path = r'E:/Temp'
  3. file_path = os.path.join(self.folder_path, "行政区划.xlsx")
复制代码


通过在路径前加上 `r`,可以创建一个原始字符串,这样 `\` 就不会被转义了。这样你构造的 `file_path` 就会是 `E:/Temp/行政区划.xlsx`。

另外,你也可以直接使用正斜杠 `/` 来拼接路径,而不使用 `os.path.join()`:

  1. import os

  2. self.folder_path = 'E:/Temp'
  3. file_path = self.folder_path + '/' + "行政区划.xlsx"
复制代码


这样也可以得到相同的结果。希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-17 23:01:51 | 显示全部楼层
FishC 发表于 2024-4-15 17:35
非常抱歉造成了误解。根据你提供的信息,我已经修改了代码以适应你所持有的《行政区划.xlsx》文件,其 ...

请问在这段代码中,如何把与code对应的name取出来(不要用pandas库)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 23:02:07 | 显示全部楼层
凊风 发表于 2024-04-17 23:01
请问在这段代码中,如何把与code对应的name取出来(不 ...


在这段代码中,可以通过遍历数据模型 `self.data_model` 来找到与给定的 `code` 对应的 `name`。修改 `load_data` 方法和 `init_comboboxes` 方法如下所示:

  1. def load_data(self, excel_file):
  2.     wb = load_workbook(excel_file)
  3.     ws = wb.active

  4.     self.data_model = []
  5.     for row in ws.iter_rows(values_only=True):
  6.         level = row[0]
  7.         code = row[1]
  8.         name = row[2]

  9.         if level == 1:
  10.             self.data_model.append((code, name))
  11.         elif level == 2:
  12.             province_code = self.combo_province.itemData(self.combo_province.currentIndex())
  13.             if code.startswith(province_code):
  14.                 self.data_model.append((code, name))
  15.         elif level == 3:
  16.             province_code = self.combo_province.itemData(self.combo_province.currentIndex())
  17.             city_code = self.combo_city.itemData(self.combo_city.currentIndex())

  18.             if code.startswith(province_code) and code.startswith(city_code):
  19.                 self.data_model.append((code, name))

  20. def init_comboboxes(self):
  21.     self.combo_province.clear()
  22.     self.combo_city.clear()
  23.     self.combo_county.clear()

  24.     self.combo_province.addItem("请选择省级")
  25.     self.combo_city.addItem("请选择市级")
  26.     self.combo_county.addItem("请选择县级")

  27.     for code, name in self.data_model:
  28.         if code.endswith("0000"):
  29.             self.combo_province.addItem(name, code)
  30.         elif code.endswith("00"):
  31.             self.combo_city.addItem(name, code)
  32.         else:
  33.             self.combo_county.addItem(name, code)
复制代码


这样修改后,`data_model` 中的每个元素都是一个元组 `(code, name)`。然后,在循环中使用 `for code, name in self.data_model` 就可以依次获取 `code` 和 `name` 的值了。

希望这次的修改能够满足你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-17 23:09:35 | 显示全部楼层
FishC 发表于 2024-4-17 23:02
在这段代码中,可以通过遍历数据模型 `self.data_model` 来找到与给定的 `code` 对应的 `name`。修改 ` ...

能不能通过self.data_model = []

name = self.data_model.index(code). ....这样的方式来取出与代码对应的name?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 23:09:52 | 显示全部楼层
凊风 发表于 2024-04-17 23:09
能不能通过self.data_model =

name = self.data_m ...


在这段代码中,你可以使用字典来映射代码与名称。将`self.data_model`修改为字典,并使用代码作为键和名称作为值,如下所示:def load_data(self, excel_file):    wb = load_workbook(excel_file)    ws = wb.active    self.data_model = {}    for row in ws.iter_rows(values_only=True):        level = row        code = row        name = row        if level == 1:            self.data_model[code] = name        elif level == 2:            province_code = self.combo_province.itemData(self.combo_province.currentIndex())            if code.startswith(province_code):                self.data_model[code] = name        elif level == 3:            province_code = self.combo_province.itemData(self.combo_province.currentIndex())            city_code = self.combo_city.itemData(self.combo_city.currentIndex())            if code.startswith(province_code) and code.startswith(city_code):                self.data_model[code] = name然后,在需要获取与代码对应的名称时,可以使用`self.data_model[code]`来获取相应的名称。希望这个修改能够满足你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-17 23:10:16 | 显示全部楼层
FishC 发表于 2024-4-17 23:09
在这段代码中,你可以使用字典来映射代码与名称。将`self.data_model`修改为字典,并使用代码作为键和 ...

回复请注意python格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 23:10:35 | 显示全部楼层
凊风 发表于 2024-04-17 23:10
回复请注意python格式


非常抱歉,以下是修改后的代码,请注意Python的格式:
  1. def load_data(self, excel_file):
  2.     wb = load_workbook(excel_file)
  3.     ws = wb.active
  4.     self.data_model = {}
  5.    
  6.     for row in ws.iter_rows(values_only=True):
  7.         level = row[0]
  8.         code = row[1]
  9.         name = row[2]
  10.         
  11.         if level == 1:
  12.             self.data_model[code] = name
  13.         elif level == 2:
  14.             province_code = self.combo_province.itemData(self.combo_province.currentIndex())
  15.             if code.startswith(province_code):
  16.                 self.data_model[code] = name
  17.         elif level == 3:
  18.             province_code = self.combo_province.itemData(self.combo_province.currentIndex())
  19.             city_code = self.combo_city.itemData(self.combo_city.currentIndex())
  20.             if code.startswith(province_code) and code.startswith(city_code):
  21.                 self.data_model[code] = name
复制代码


在这段代码中,通过创建一个空字典`self.data_model = {}`来存储代码和名称的映射关系。然后在循环遍历数据行时,根据不同的级别进行条件判断,将代码作为键,名称作为值添加到字典中。这样,在需要获取与代码对应的名称时,可以通过`self.data_model[code]`来获取相应的名称。

希望这次给出的代码格式符合你的要求。如果还有任何问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-18 11:01:49 | 显示全部楼层
FishC 发表于 2024-4-17 23:10
非常抱歉,以下是修改后的代码,请注意Python的格式:

在这段代码中,通过创建一个空字典`self.data ...

按钮文本需要回行,请问要用哪个参数?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-18 11:01:57 | 显示全部楼层
凊风 发表于 2024-04-18 11:01
按钮文本需要回行,请问要用哪个参数?


要使按钮文本换行,你可以使用QPushButton的`setWordWrap(True)`方法。将其设置为True后,按钮的文本将根据需要自动换行。例如:self.exit_button.setWordWrap(True)

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-18 11:05:00 | 显示全部楼层
FishC 发表于 2024-4-18 11:01
要使按钮文本换行,你可以使用QPushButton的`setWordWrap(True)`方法。将其设置为True后,按钮的文本将 ...

怎么在Qt Designer里找不到按钮的这个setWordWrap属性?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-18 11:05:33 | 显示全部楼层
凊风 发表于 2024-04-18 11:05
怎么在Qt Designer里找不到按钮的这个setWordWrap属性 ...


在Qt Designer中,确实没有直接找到按钮的`setWordWrap`属性。不过,你可以通过设置QPushButton的样式表来实现按钮文本的换行。具体步骤如下:

1. 在Qt Designer中选中按钮控件。
2. 在属性编辑器中,找到"styleSheet"属性,并点击旁边的图标以打开样式表编辑器。
3. 在样式表编辑器中,输入以下代码来设置文本换行:
  
  1. QPushButton {
  2.        white-space: pre-wrap;
  3.    }
复制代码

   这将使按钮的文本支持换行。
4. 点击确定保存样式表设置。

这样,你就可以在Qt Designer中通过设置样式表来实现按钮文本的换行了。记得在保存样式表后,重新生成代码并应用到你的项目中。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-18 11:09:14 | 显示全部楼层
FishC 发表于 2024-4-18 11:05
在Qt Designer中,确实没有直接找到按钮的`setWordWrap`属性。不过,你可以通过设置QPushButton的样式 ...

好像没有用   按钮文本仍然不自动回行。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-18 11:09:29 | 显示全部楼层
凊风 发表于 2024-04-18 11:09
好像没有用   按钮文本仍然不自动回行。。。。


非常抱歉,我的错误。确实在Qt Designer中无法直接找到按钮的`setWordWrap`属性。如果你希望按钮文本自动换行,可以通过代码来实现。请将以下代码添加到你的项目中:

  1. self.exit_button.setWordWrap(True)
复制代码


这样可以在运行时设置按钮的`setWordWrap`属性为True,实现按钮文本的自动换行。在你的示例代码中,可以将上述代码添加到`Welcome_Window`类的`__init__`方法中,如下所示:

  1. class Welcome_Window(BaseWindow):
  2.     def __init__(self):
  3.         super().__init__()
  4.         self.setWindowTitle("欢迎使用")
  5.         self.exit_button = QPushButton("退出", self)
  6.         self.exit_button.clicked.connect(self.confirm_exit)
  7.         self.exit_button.setWordWrap(True)
复制代码


这样,按钮文本就会自动换行了。希望这次的回答能够解决你的问题!如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-19 21:49:57 | 显示全部楼层
FishC 发表于 2024-4-18 11:09
非常抱歉,我的错误。确实在Qt Designer中无法直接找到按钮的`setWordWrap`属性。如果你希望按钮文本自 ...

现有self.Region_Select = ['A', 'B', 'C', 'D', 'E'],

        if self.Region_Code == 1:
           要求 Region_Select = AE
        elif self.Region_Code == 2:
            要求 Region_Select = ABCE
        elif self.Region_Code == 3:
            要求 Region_Select = ABCDE

请问要如何实现?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-20 08:36:08 | 显示全部楼层
FishC 发表于 2024-4-17 22:50
这是因为在Windows系统中,反斜杠(`\`)通常用作路径的分隔符。所以在你构造文件路径时,`os.path.joi ...

现有self.Region_Select = ['A', 'B', 'C', 'D', 'E'],

        if self.Region_Code == 1:
           要求 Region_Select = AE
        elif self.Region_Code == 2:
            要求 Region_Select = ABCE
        elif self.Region_Code == 3:
            要求 Region_Select = ABCDE

请问要如何实现?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表