首页 > 解决方案 > 单击扫描ble的按钮后如何加载组合框?

问题描述

我对 tkinter 框架非常陌生,想知道是否有人可以帮助我解决我的问题。单击“扫描”按钮后,我正在尝试加载组合框。此扫描按钮基本上扫描特定的蓝牙设备并返回所有蓝牙设备。扫描完成后,它应该加载带有结果的组合框。然后从组合框中选择一个选项后,我想将该值传递给连接到蓝牙设备的另一个按钮功能。

class MyFirstGUI:
    def __init__(self, master):
        self.master = master
        master.title("A simple GUI")

        self.label = Label(master, text="This is our first GUI!")
        self.label.pack()

        self.button_scan = Button(master, text="Scan", command=self.scan1)
        self.button_scan.pack()

        self.box_value = StringVar()
        self.cb = ttk.Combobox(master, textvariable=self.box_value)
        self.cb.pack()
        self.cb['values'] = self.scan1()


        self.close_button = Button(master, text="Close", command=master.quit)
        self.close_button.pack()

    def scan1(self):
        scanner = Scanner()
        devices = scanner.scan(5)
        data = []
        for dev in devices:
            scanData = dev.getScanData()
            for (adtype, desc, value) in scanData:
                if desc == 'Complete Local Name':
                    if 'Thunder Sense #' in value:
                        deviceMac = dev.addr
                        #deviceMac1= str(deviceMac)
                        deviceId = int(value.split('#')[-1])
                        deviceId2 = str(deviceId)
                        print(deviceMac)
                        data.append(deviceMac)
                        #data.append(deviceMac)
        print(data)
        return data


root = Tk()
my_gui = MyFirstGUI(root)
root.mainloop()

我可以打印 deviceMac 以及列表,但我似乎无法加载组合框。谢谢

标签: pythontkintercombobox

解决方案


scan1不必返回数据。combobox扫描完成后直接修改 的值即可。

class MyFirstGUI:
    def __init__(self, master):
        ...

        self.box_value = StringVar()
        self.cb = ttk.Combobox(master, textvariable=self.box_value)
        self.cb.pack()

        ...

    def scan1(self):
        scanner = Scanner()
        devices = scanner.scan(5)
        data = []
        for dev in devices:
            scanData = dev.getScanData()
            for (adtype, desc, value) in scanData:
                if desc == 'Complete Local Name':
                    if 'Thunder Sense #' in value:
                        deviceMac = dev.addr
                        # deviceMac1= str(deviceMac)
                        deviceId = int(value.split('#')[-1])
                        deviceId2 = str(deviceId)
                        print(deviceMac)
                        data.append(deviceMac)
        self.cb["values"] = data

推荐阅读