通过组合框更改标签,反之亦然

问题描述

嗨,有人可以帮助我吗?我是编程新手,正在尝试使用tkinter做一个小项目。基本上,我的问题是如何做到这一点,所以当我从组合框中选择一个选项时,ttk笔记本上的选项卡也会被选中,反之亦然。预先感谢

 import tkinter as tk
 from tkinter import ttk

 class Main(tk.Tk):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)

        container = ttk.Frame(self)
        container.grid()

        frame = Frame(container,self)
        frame.grid(column=0,row=0)

        notebook = Notebook(container,self)
        notebook.grid(column=1,row=0)

 class Frame(ttk.Frame):
    def __init__(self,parent,controller,**kwargs):
        super().__init__(parent,**kwargs)

        comboBox = ttk.ComboBox(self)
        comboBox["values"] = ["a","b","c"]
        comboBox.grid()


 class Notebook(ttk.Notebook):
    def __init__(self,**kwargs)

        first = ttk.Frame(self)
        second = ttk.Frame(self)
        third = ttk.Frame(self)


        self.add(first,text="a")
        self.add(second,text="b")
        self.add(third,text="c")

 root = Main()
 root.mainloop()

解决方法

尝试下面的完整代码,

import tkinter as tk
from tkinter import ttk

class Main(tk.Tk):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)

        container = ttk.Frame(self)
        container.grid()

        frame = Frame(container,self)
        frame.grid(column=0,row=0)

        notebook = Notebook(container,self)
        notebook.grid(column=1,row=0)

class Frame(ttk.Frame):
    options=["a","b","c"]
    def __init__(self,parent,controller,**kwargs):
        super().__init__(parent,**kwargs)

        Frame.combobox = ttk.Combobox(self)
        self.combobox["values"] = self.options
        self.combobox.grid()

class Notebook(ttk.Notebook):
    def __init__(self,**kwargs)

        first = ttk.Frame(self)
        second = ttk.Frame(self)
        third = ttk.Frame(self)

        self.add(first,text="a")
        self.add(second,text="b")
        self.add(third,text="c")
        Frame.combobox.bind("<<ComboboxSelected>>",self.on_selection)
        self.bind("<<NotebookTabChanged>>",self.on_tab_selection)
    def on_selection(self,a):
        selected=Frame.combobox.get()
        Frame.options.index(selected)
        self.select(Frame.options.index(selected))
    def on_tab_selection(self,a):
        Frame.combobox.set(Frame.options[self.index("current")])

root = Main()
root.mainloop()

进行了一些修改,

Frame.combobox.bind("<<ComboboxSelected>>",self.on_selection)
self.bind("<<NotebookTabChanged>>",self.on_tab_selection)

以上代码用于记录笔记本和组合框的选择事件

def on_selection(self,a):
        selected=Frame.combobox.get()
        Frame.options.index(selected)
        self.select(Frame.options.index(selected))
def on_tab_selection(self,a):
        Frame.combobox.set(Frame.options[self.index("current")])

上面有两个函数可以处理两个事件

组合框值放在变量列表“选项”中