鱼C论坛

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

Pyside6求教20240414~~~

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

已经有字典了啊,

就是《行政区划.xlsx》,

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

用哪个命令可以把与代码对应的名称取出来呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是《行政区划.xlsx》,

此 ...


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

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

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

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

print(selected_name)  # 输出对应的名称

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我pandas库不能正常安装 ,能不能不要用pandas的命令?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

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

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

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

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

print(selected_name)  # 输出对应的名称

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> 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?

这要怎么解决?
想知道小甲鱼最近在做啥?请访问 -> 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)来表示路径。具体解决方法如下:
import os

self.folder_path = r'E:/Temp'
file_path = os.path.join(self.folder_path, "行政区划.xlsx")

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

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

self.folder_path = 'E:/Temp'
file_path = self.folder_path + '/' + "行政区划.xlsx"

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

请问在这段代码中,如何把与code对应的name取出来(不要用pandas库)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


在这段代码中,可以通过遍历数据模型 `self.data_model` 来找到与给定的 `code` 对应的 `name`。修改 `load_data` 方法和 `init_comboboxes` 方法如下所示:
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[0]
        code = row[1]
        name = row[2]

        if level == 1:
            self.data_model.append((code, name))
        elif level == 2:
            province_code = self.combo_province.itemData(self.combo_province.currentIndex())
            if code.startswith(province_code):
                self.data_model.append((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.append((code, name))

def init_comboboxes(self):
    self.combo_province.clear()
    self.combo_city.clear()
    self.combo_county.clear()

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

    for code, name in self.data_model:
        if code.endswith("0000"):
            self.combo_province.addItem(name, code)
        elif code.endswith("00"):
            self.combo_city.addItem(name, code)
        else:
            self.combo_county.addItem(name, code)

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> 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?
想知道小甲鱼最近在做啥?请访问 -> 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回复请注意python格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


非常抱歉,以下是修改后的代码,请注意Python的格式:
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[0]
        code = row[1]
        name = row[2]
        
        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 = {}`来存储代码和名称的映射关系。然后在循环遍历数据行时,根据不同的级别进行条件判断,将代码作为键,名称作为值添加到字典中。这样,在需要获取与代码对应的名称时,可以通过`self.data_model[code]`来获取相应的名称。

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

按钮文本需要回行,请问要用哪个参数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

怎么在Qt Designer里找不到按钮的这个setWordWrap属性?
想知道小甲鱼最近在做啥?请访问 -> 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. 在样式表编辑器中,输入以下代码来设置文本换行:
QPushButton {
       white-space: pre-wrap;
   }
   这将使按钮的文本支持换行。
4. 点击确定保存样式表设置。

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好像没有用   按钮文本仍然不自动回行。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

这样可以在运行时设置按钮的`setWordWrap`属性为True,实现按钮文本的自动换行。在你的示例代码中,可以将上述代码添加到`Welcome_Window`类的`__init__`方法中,如下所示:
class Welcome_Window(BaseWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("欢迎使用")
        self.exit_button = QPushButton("退出", self)
        self.exit_button.clicked.connect(self.confirm_exit)
        self.exit_button.setWordWrap(True)

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> 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

请问要如何实现?
想知道小甲鱼最近在做啥?请访问 -> 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

请问要如何实现?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-1 13:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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