PyQt5_QComboBox_实现一个江苏 浙江 安徽 三省市的级联表


from PyQt5.Qt import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('230_QComboBox_案例,全国省市级联表')
        self.resize(500,500)
        self.iniUI()

    def iniUI(self):
        cb1 = QComboBox(self)
        cb2 = QComboBox(self)
        self.cb1 = cb1
        self.cb2 = cb2
        cb1.resize(self.width() * 4 / 12, self.height() / 10)
        cb2.resize(self.width() * 4 / 12, self.height() / 10)
        cb1.move((self.width() - cb1.width()*2) / 2, (self.height() - cb1.height()) *13/ 32)
        cb2.move(self.width()-((self.width() - cb2.width() * 2) / 2)-cb2.width(), (self.height() - cb2.height()) * 13 / 32)

        label = QLabel(self)
        self.label = label
        label.setText('')
        label.setAlignment(Qt.AlignCenter)
        label.setStyleSheet('font-size:35px;background-color:cyan;')
        label.resize(self.cb1.width(),self.cb1.height()*2)
        label.move((self.width()-label.width())/2,self.cb1.y()+self.cb1.height()*2)



    def comboBoxOperation(self):
        AnHui =   {'合肥':'霸都','芜湖':'米市','安庆':'宜城','蚌埠':'铁路','淮南':'煤矿'}
        JiangSu = {'南京':'金陵','苏州':'姑苏','泰州':'汉唐','扬州':'广陵','徐州':'陶谦'}
        ZheJiang ={'杭州':'临安','绍兴':'会稽','义乌':'批发','奉化':'老蒋','温州':'永嘉'}

        self.dictionary = {'安徽':AnHui,'江苏':JiangSu,'浙江':ZheJiang}

        self.cb1.currentIndexChanged[str].connect(self.cb1_changed)
        self.cb2.currentIndexChanged.connect(self.cb2_changed)

        self.cb1.addItems(self.dictionary.keys())#首先创建好信号连接,然后再去操作数据


    def cb1_changed(self,province):
        cities = self.dictionary[province]
        self.cb2.blockSignals(True)
        self.cb2.clear()
        self.cb2.blockSignals(False)
        for key,value in cities.items():
            self.cb2.addItem(key,value)

    def cb2_changed(self,index):
        nickname = self.cb2.itemData(index)
        print(nickname)
        self.label.setText(nickname)


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    win = MyWindow()
    win.comboBoxOperation()
    win.show()
    sys.exit(app.exec_())

在这里插入图片描述在这里插入图片描述

在使用 PySerial 和 PyQt5 实现串口实时状态发现并选择的过程中,我们可以使用 QComboBox 组件来实现串口的选择,使用 PySerial 库来进行串口的实时状态发现。 首先,我们需要安装 PySerial 库,可以使用以下命令进行安装: ``` pip install pyserial ``` 接着,我们需要在 PyQt5 界面中添加一个 QComboBox 组件,用于显示可用的串口。代码如下: ```python from PyQt5.QtWidgets import QComboBox # 创建一个 QComboBox 对象 self.combo_box = QComboBox(self) # 将 QComboBox 添加到界面上 self.layout.addWidget(self.combo_box) ``` 接着,我们需要使用 PySerial 库来实现串口的实时状态发现。代码如下: ```python import serial.tools.list_ports # 获取可用的串口列 ports = serial.tools.list_ports.comports() # 遍历可用的串口列,将串口添加到 QComboBox 中 for port in ports: self.combo_box.addItem(port.device) ``` 以上代码会获取所有可用的串口,并将它们添加到 QComboBox 中。 最后,我们需要在 QComboBox 中选择串口,以便进行通信。代码如下: ```python import serial # 获取选中的串口 port_name = self.combo_box.currentText() # 创建串口对象 ser = serial.Serial(port_name, 9600) ``` 以上代码会获取当前选中的串口名称,并创建一个串口对象以进行通信。 综上所述,我们可以使用 PyQt5 和 PySerial 库来实现串口实时状态发现并选择。完整的代码示例如下: ```python from PyQt5.QtWidgets import QComboBox, QWidget, QVBoxLayout import serial.tools.list_ports import serial class SerialMonitor(QWidget): def __init__(self): super().__init__() # 创建一个垂直布局 self.layout = QVBoxLayout(self) # 创建一个 QComboBox 对象 self.combo_box = QComboBox(self) # 将 QComboBox 添加到界面上 self.layout.addWidget(self.combo_box) # 获取可用的串口列 ports = serial.tools.list_ports.comports() # 遍历可用的串口列,将串口添加到 QComboBox 中 for port in ports: self.combo_box.addItem(port.device) # 为 QComboBox 组件添加回调函数 self.combo_box.currentIndexChanged.connect(self.on_serial_port_selected) def on_serial_port_selected(self): # 获取选中的串口 port_name = self.combo_box.currentText() # 创建串口对象 ser = serial.Serial(port_name, 9600) # 在此处进行串口通信 ``` 在以上代码中,我们创建了一个名为 SerialMonitor 的 QWidget 子类,它包含一个 QComboBox一个垂直布局。我们使用 PySerial 库获取可用的串口列,并将串口名称添加到 QComboBox 中。在选择串口时,我们使用 PySerial 创建一个串口对象以进行通信。你可以在 on_serial_port_selected 函数中添加任何你需要的串口通信代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值