凊风
发表于 2024-4-17 21:24:52
FishC 发表于 2024-4-17 21:24
要让`self.radioButton_2`自动选中,可以使用`setChecked(True)`方法。以下是修改后的代码示例:在`Mai ...
回复请注意Python格式
FishC
发表于 2024-4-17 21:25:11
凊风 发表于 2024-04-17 21:24
回复请注意Python格式
非常抱歉没有注意到Python格式的要求,下面是修改后的格式化代码示例:
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QRadioButton
from PySide6.QtCore import Qt, QUrl
from PySide6.QtWebEngineWidgets import QWebEngineView
import requests
def search_website(website):
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Bing搜索")
self.web_view = QWebEngineView()
self.web_view.load(QUrl("https://www.bing.com"))
self.setCentralWidget(self.web_view)
layout = QVBoxLayout()
self.search_input = QLineEdit()
self.search_button = QPushButton("搜索")
self.search_button.clicked.connect(self.search)
layout.addWidget(self.search_input)
layout.addWidget(self.search_button)
self.radioButton_1 = QRadioButton("选项1")
self.radioButton_2 = QRadioButton("选项2")
layout.addWidget(self.radioButton_1)
layout.addWidget(self.radioButton_2)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
# 设置self.radioButton_2默认选中
if website == "https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html":
self.radioButton_2.setChecked(True)
def search(self):
website = self.search_input.text()
if website:
url = f"https://www.bing.com/search?q={website} site:{website}"
response = requests.get(url)
if response.status_code == 200:
results = response.text
# 在这里解析搜索结果,并提取相关网址
urls = parse_results(results)
if urls:
# 将搜索到的第一个网址显示在WebView中
self.web_view.load(QUrl(urls))
else:
QMessageBox.warning(self, "提示", "没有找到相关网址")
else:
QMessageBox.warning(self, "提示", "网络请求失败")
else:
QMessageBox.warning(self, "提示", "请输入要搜索的网站")
app = QApplication()
window = MainWindow()
window.show()
app.exec()
if __name__ == "__main__":
search_website("https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html")
非常抱歉给你带来了困扰,请见谅。如果还有其他问题,请随时向我提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 21:41:27
FishC 发表于 2024-4-15 17:35
非常抱歉造成了误解。根据你提供的信息,我已经修改了代码以适应你所持有的《行政区划.xlsx》文件,其 ...
请问这报错是什么意思?
Traceback (most recent call last):
line 1180, in on_city_changed
if code.startswith(province_code) and code.startswith(city_code):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: startswith first arg must be str or a tuple of str, not NoneType
Traceback (most recent call last):
line 1166, in on_province_changed
if code.startswith(province_code) and code.endswith("00"):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: startswith first arg must be str or a tuple of str, not NoneType
FishC
发表于 2024-4-17 21:41:48
凊风 发表于 2024-04-17 21:41
请问这报错是什么意思?
Traceback (most recent cal ...
这个错误意味着`startswith`函数的第一个参数必须是字符串或者字符串元组,而不能是`NoneType`类型。出现这个错误的原因可能是以下两种情况之一:
1. `self.combo_province.itemData(index)`返回了`None`值。这可能是因为你在加载数据时没有正确设置省级代码的数据。请确保在加载数据时,为每个省级的选项设置了正确的省级代码。
2. `province_code`或`city_code`的值不是一个字符串或者字符串元组。这可能是因为在加载数据时,没有逐行遍历Excel文件的每一行数据。请注意检查是否正确设置了`level`、`code`和`name`的值。
为了解决这个问题,你可以按照以下步骤进行检查:
1. 确保在加载数据时,将所有省级选项的代码设置为字符串类型,并将其存储在`itemData`中。
2. 确保在加载数据时,遍历Excel文件的每一行,并为每个级别的地区(省、市、县)设置正确的代码和名称。
修改后的代码示例如下:
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 = str(row)
name = row
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 province_code is not None and city_code is not None:
if code.startswith(province_code) and code.startswith(city_code):
self.data_model.append((code, name))
请尝试修改代码,并再次运行程序。如果问题仍然存在,请检查数据加载的部分,确保设置了正确的省级代码和字符串类型的数据。如果还有任何问题,请随时向我提问。祝你好运!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 21:46:45
FishC 发表于 2024-4-17 21:41
这个错误意味着`startswith`函数的第一个参数必须是字符串或者字符串元组,而不能是`NoneType`类型。出 ...
报错:
Traceback (most recent call last):
line 1089, in select_folder
self.region_select(self.Region_file)
line 1098, in region_select
self.load_data(self.Region_file)
line 1128, in load_data
if code.startswith(province_code):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: startswith first arg must be str or a tuple of str, not NoneType
FishC
发表于 2024-4-17 21:47:06
凊风 发表于 2024-04-17 21:46
报错:
Traceback (most recent call last):
line ...
这个错误意味着`startswith`函数的第一个参数必须是字符串或者字符串元组,而不能是`NoneType`类型。出现这个错误的原因可能是以下两种情况之一:1. `province_code`的值为`None`。这可能是因为在加载数据时没有正确设置省级代码的数据,导致`province_code`的值为空。请确保在加载数据时,为每个省级的选项设置了正确的省级代码。2. `code`的值不是一个字符串。这可能是因为在加载数据时,没有正确设置`code`的数据类型。为了解决这个问题,你可以按照以下步骤进行检查:1. 在数据加载之前,确保正确设置了`province_code`的值,并且该值不为空。可以通过打印输出`province_code`的值来检查。2. 在加载数据时,将`code`转换为字符串类型。可以使用`str()`函数来实现这一点,即`code = str(code)`。修改后的代码示例如下: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 = str(row) name = row if level == 1: self.data_model.append((code, name)) elif level == 2: province_code = self.combo_province.itemData(self.combo_province.currentIndex()) if province_code is not None: 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 province_code is not None and city_code is not None: if code.startswith(province_code) and code.startswith(city_code): self.data_model.append((code, name))请尝试修改代码,并再次运行程序。如果问题仍然存在,请检查数据加载的部分,确保设置了正确的省级代码和字符串类型的数据。如果还有任何问题,请随时向我提问。祝你好运!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 21:48:28
FishC 发表于 2024-4-17 21:47
这个错误意味着`startswith`函数的第一个参数必须是字符串或者字符串元组,而不能是`NoneType`类型。出 ...
回复请注意Python格式
FishC
发表于 2024-4-17 21:48:43
凊风 发表于 2024-04-17 21:48
回复请注意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
code = str(row)
name = row
if level == 1:
self.data_model.append((code, name))
elif level == 2:
province_code = self.combo_province.itemData(self.combo_province.currentIndex())
if province_code is not None:
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 province_code is not None and city_code is not None:
if code.startswith(province_code) and code.startswith(city_code):
self.data_model.append((code, name))
请尝试使用这个修改后的代码,并再次运行程序。如果问题仍然存在,请检查数据加载部分,确保设置了正确的省级代码和字符串类型的数据。如果还有任何问题,请随时向我提问。祝你好运!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 22:05:26
FishC 发表于 2024-4-15 17:35
非常抱歉造成了误解。根据你提供的信息,我已经修改了代码以适应你所持有的《行政区划.xlsx》文件,其 ...
这段代码中,哪行可以看到self.combo_province已经选了值,并且要把它存起来。
FishC
发表于 2024-4-17 22:05:50
凊风 发表于 2024-04-17 22:05
这段代码中,哪行可以看到self.combo_province已经选 ...
在代码中,可以通过`self.combo_province.currentIndex()`获取当前已选中的省级选项的索引值。然后,可以使用`self.combo_province.itemData(index)`来获取与该索引对应的省级选项的数据值(即区划代码)。可以将该数据值存储在一个变量中以备后续使用。以下是修改后的代码示例:
from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox, QVBoxLayout, QWidget
from openpyxl import load_workbook
def create_cascading_combobox(excel_file):
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("行政区划")
self.combo_province = QComboBox()
self.combo_city = QComboBox()
self.combo_county = QComboBox()
self.selected_province_code = ""# 存储已选中省级选项的区划代码
layout = QVBoxLayout()
layout.addWidget(self.combo_province)
layout.addWidget(self.combo_city)
layout.addWidget(self.combo_county)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.load_data(excel_file)
self.init_comboboxes()
self.combo_province.currentIndexChanged.connect(self.on_province_changed)
self.combo_city.currentIndexChanged.connect(self.on_city_changed)
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.append((code, name))
elif level == 2:
self.data_model.append((code, name))
elif level == 3:
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("请选择省级")
for code, name in self.data_model:
if code.endswith("0000"):
self.combo_province.addItem(name, code)
def on_province_changed(self, index):
self.selected_province_code = self.combo_province.itemData(index)# 存储已选中省级选项的区划代码
self.combo_city.clear()
self.combo_county.clear()
self.combo_city.addItem("请选择市级")
self.combo_county.addItem("请选择县级")
def on_city_changed(self, index):
self.combo_county.clear()
city_code = self.combo_city.itemData(index)
self.combo_county.addItem("请选择县级")
app = QApplication()
window = MainWindow()
window.show()
app.exec()
create_cascading_combobox("行政区划.xlsx")
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 22:21:22
FishC 发表于 2024-4-17 22:05
在代码中,可以通过`self.combo_province.currentIndex()`获取当前已选中的省级选项的索引值。然后,可 ...
我看起来代码中好像没有self.combo_county.addItem("请选择县级")的选中及储存啊?
FishC
发表于 2024-4-17 22:21:51
凊风 发表于 2024-04-17 22:21
我看起来代码中好像没有self.combo_county.addItem(" ...
非常抱歉,我之前的回答有误。确实在代码中没有处理县级选项的选中和存储。以下是修改后的代码示例,它将存储已选中的县级选项的区划代码并在选中时进行更新:
from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox, QVBoxLayout, QWidget
from openpyxl import load_workbook
def create_cascading_combobox(excel_file):
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("行政区划")
self.combo_province = QComboBox()
self.combo_city = QComboBox()
self.combo_county = QComboBox()
self.selected_province_code = ""# 存储已选中省级选项的区划代码
self.selected_city_code = ""# 存储已选中市级选项的区划代码
self.selected_county_code = ""# 存储已选中县级选项的区划代码
layout = QVBoxLayout()
layout.addWidget(self.combo_province)
layout.addWidget(self.combo_city)
layout.addWidget(self.combo_county)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.load_data(excel_file)
self.init_comboboxes()
self.combo_province.currentIndexChanged.connect(self.on_province_changed)
self.combo_city.currentIndexChanged.connect(self.on_city_changed)
self.combo_county.currentIndexChanged.connect(self.on_county_changed)
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.append((code, name))
elif level == 2:
self.data_model.append((code, name))
elif level == 3:
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("请选择省级")
for code, name in self.data_model:
if code.endswith("0000"):
self.combo_province.addItem(name, code)
def on_province_changed(self, index):
self.selected_province_code = self.combo_province.itemData(index)# 存储已选中省级选项的区划代码
# 清除之前选择的市级和县级选项
self.combo_city.clear()
self.combo_county.clear()
self.combo_city.addItem("请选择市级")
self.combo_county.addItem("请选择县级")
def on_city_changed(self, index):
self.selected_city_code = self.combo_city.itemData(index)# 存储已选中市级选项的区划代码
# 清除之前选择的县级选项
self.combo_county.clear()
self.combo_county.addItem("请选择县级")
def on_county_changed(self, index):
self.selected_county_code = self.combo_county.itemData(index)# 存储已选中县级选项的区划代码
app = QApplication()
window = MainWindow()
window.show()
app.exec()
create_cascading_combobox("行政区划.xlsx")
这样,当选择县级选项时,`self.selected_county_code`变量中就会存储相应的区划代码。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 22:27:08
FishC 发表于 2024-4-17 22:21
非常抱歉,我之前的回答有误。确实在代码中没有处理县级选项的选中和存储。以下是修改后的代码示例,它 ...
可能我没表达清楚,我需要储存的是与所选中代码对应的“名称”。。。
如省名
市 名
县名。
不存储代码。
FishC
发表于 2024-4-17 22:27:33
凊风 发表于 2024-04-17 22:27
可能我没表达清楚,我需要储存的是与所选中代码对应的 ...
非常抱歉,我理解错了你的需求。以下是修改后的代码示例,它会存储所选省、市、县的名称:from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox, QVBoxLayout, QWidgetfrom openpyxl import load_workbookdef create_cascading_combobox(excel_file): class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("行政区划") self.combo_province = QComboBox() self.combo_city = QComboBox() self.combo_county = QComboBox() self.selected_province_name = ""# 存储已选中省级选项的名称 self.selected_city_name = ""# 存储已选中市级选项的名称 self.selected_county_name = ""# 存储已选中县级选项的名称 layout = QVBoxLayout() layout.addWidget(self.combo_province) layout.addWidget(self.combo_city) layout.addWidget(self.combo_county) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) self.load_data(excel_file) self.init_comboboxes() self.combo_province.currentIndexChanged.connect(self.on_province_changed) self.combo_city.currentIndexChanged.connect(self.on_city_changed) self.combo_county.currentIndexChanged.connect(self.on_county_changed) 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, code, name = row if level == 1: self.data_model.append((code, name)) elif level == 2: self.data_model.append((code, name)) elif level == 3: 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("请选择省级") for _, name in self.data_model: self.combo_province.addItem(name) def on_province_changed(self, index): self.selected_province_name = self.combo_province.itemText(index)# 存储已选中省级选项的名称 # 清除之前选择的市级和县级选项 self.combo_city.clear() self.combo_county.clear() self.combo_city.addItem("请选择市级") self.combo_county.addItem("请选择县级") def on_city_changed(self, index): self.selected_city_name = self.combo_city.itemText(index)# 存储已选中市级选项的名称 # 清除之前选择的县级选项 self.combo_county.clear() self.combo_county.addItem("请选择县级") def on_county_changed(self, index): self.selected_county_name = self.combo_county.itemText(index)# 存储已选中县级选项的名称 app = QApplication() window = MainWindow() window.show() app.exec()create_cascading_combobox("行政区划.xlsx")现在,当选择省、市、县选项时,`self.selected_province_name`、`self.selected_city_name` 和 `self.selected_county_name` 变量中分别储存了对应的名称。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 22:29:00
FishC 发表于 2024-4-17 22:27
非常抱歉,我理解错了你的需求。以下是修改后的代码示例,它会存储所选省、市、县的名称:from PySide6 ...
回复请注意Python格式
FishC
发表于 2024-4-17 22:29:25
凊风 发表于 2024-04-17 22:29
回复请注意Python格式
非常抱歉,以下是修改后的代码示例,它会存储所选省、市、县的名称:
from PySide6.QtWidgets import QApplication, QMainWindow, QComboBox, QVBoxLayout, QWidget
from openpyxl import load_workbook
def create_cascading_combobox(excel_file):
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("行政区划")
self.combo_province = QComboBox()
self.combo_city = QComboBox()
self.combo_county = QComboBox()
self.selected_province_name = ""# 存储已选中省级选项的名称
self.selected_city_name = ""# 存储已选中市级选项的名称
self.selected_county_name = ""# 存储已选中县级选项的名称
layout = QVBoxLayout()
layout.addWidget(self.combo_province)
layout.addWidget(self.combo_city)
layout.addWidget(self.combo_county)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.load_data(excel_file)
self.init_comboboxes()
self.combo_province.currentIndexChanged.connect(self.on_province_changed)
self.combo_city.currentIndexChanged.connect(self.on_city_changed)
self.combo_county.currentIndexChanged.connect(self.on_county_changed)
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, code, name = row
if level == 1:
self.data_model.append((code, name))
elif level == 2:
self.data_model.append((code, name))
elif level == 3:
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("请选择省级")
for _, name in self.data_model:
self.combo_province.addItem(name)
def on_province_changed(self, index):
self.selected_province_name = self.combo_province.itemText(index)# 存储已选中省级选项的名称
# 清除之前选择的市级和县级选项
self.combo_city.clear()
self.combo_county.clear()
self.combo_city.addItem("请选择市级")
self.combo_county.addItem("请选择县级")
def on_city_changed(self, index):
self.selected_city_name = self.combo_city.itemText(index)# 存储已选中市级选项的名称
# 清除之前选择的县级选项
self.combo_county.clear()
self.combo_county.addItem("请选择县级")
def on_county_changed(self, index):
self.selected_county_name = self.combo_county.itemText(index)# 存储已选中县级选项的名称
app = QApplication()
window = MainWindow()
window.show()
app.exec()
create_cascading_combobox("行政区划.xlsx")
现在,当选择省、市、县选项时,`self.selected_province_name`、`self.selected_city_name` 和 `self.selected_county_name` 变量中分别储存了对应的名称。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 22:31:16
FishC 发表于 2024-4-17 22:29
非常抱歉,以下是修改后的代码示例,它会存储所选省、市、县的名称:
如果已经储存了代码,用哪个命令可以把代码所对应的名称取出来呢?
FishC
发表于 2024-4-17 22:31:31
凊风 发表于 2024-04-17 22:31
如果已经储存了代码,用哪个命令可以把代码所对应的名 ...
如果你已经储存了代码,并且想要获取该代码所对应的名称,可以使用`__name__`变量来获取。`__name__`是Python中的一个特殊变量,表示当前模块的名称。在交互式命令行中执行代码时,`__name__`会被设置为`__main__`,而在作为模块被导入时,`__name__`会被设置为模块的名称。
以下是一个示例:
def my_function():
print(__name__)
print("函数的名称:", my_function.__name__)
my_function()
运行这段代码,你将会得到如下输出:
函数的名称: my_function
my_function
你可以使用`__name__`来获取函数、类或模块的名称,以便于进一步处理或显示。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
凊风
发表于 2024-4-17 22:32:52
FishC 发表于 2024-4-17 22:21
非常抱歉,我之前的回答有误。确实在代码中没有处理县级选项的选中和存储。以下是修改后的代码示例,它 ...
在这段代码中,如果已经储存了代码,用哪个命令可以把与代码对应的名称取出来呢?
FishC
发表于 2024-4-17 22:33:08
凊风 发表于 2024-04-17 22:32
在这段代码中,如果已经储存了代码,用哪个命令可以把 ...
在代码中已经存储了区划代码,如果要根据区划代码获取对应的名称,你可以使用以下方法:1. 创建一个字典,将区划代码作为键,对应的名称作为值。例如:code_to_name = { "110000": "北京市", "120000": "天津市", ...}2. 使用存储的区划代码作为键来查找对应的名称。例如,如果你已经存储了一个省级的区划代码`selected_province_code`,可以使用以下代码来获取对应的省级名称:province_name = code_to_name.get(selected_province_code)如果`selected_province_code`存在于`code_to_name`字典的键中,那么`province_name`就会得到对应的省级名称。如果不存在,`province_name`将会是`None`。同样的方法可以用于获取市级和县级名称。希望这能够帮到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
1
2
3
4
5
6
7
[8]
9
10
11