import tkinter as tk

class Window(tk.Tk):
    def __init__(self):
        super(Window, self).__init__()

        self.var=tk.IntVar()

        self.rad=tk.Radiobutton(self,text='one',variable=self.var,value=1)
        self.rad2=tk.Radiobutton(self,text='two',variable=self.var,value=2)
        self.rad3=tk.Radiobutton(self,text='three',variable=self.var,value=3)

        self.btn=tk.Button(self,text='click',command=self.slot_fun)

        #布局
        for i in [self.rad,self.rad2,self.rad3,self.btn]:
            i.pack(side=tk.LEFT,padx=30,pady=30,ipadx=10,ipady=10)

    def slot_fun(self):
        print(self.var.get())



if __name__ == '__main__':
    win=Window()
    win.geometry("500x500")
    win.config(bg='lightblue')
    win.mainloop()
import tkinter as tk


langs=[
    ('python',1),
    ('c++',2),
    ('c#',3),
    ('delphi',4)
]




class Window(tk.Tk):
    def __init__(self):
        super(Window, self).__init__()

        self.var=tk.IntVar(value=1)


        for i,index in langs:
            rad=tk.Radiobutton(self,text=i,variable=self.var,value=index,font=("宋体",18))
            rad.pack(side=tk.LEFT,padx=30,pady=10,ipadx=10,ipady=10)
        self.btn=tk.Button(self,text='click',command=self.btn_click,anchor=tk.W)
        self.btn.pack(side=tk.BOTTOM,padx=10,pady=40)

    def btn_click(self):
        index=self.var.get()
        print(langs[index-1][0])



if __name__ == '__main__':
    win=Window()
    win.geometry("500x500")
    win.config(bg='lightblue')
    win.mainloop()
import tkinter as tk




class Window(tk.Tk):
    def __init__(self):
        super(Window, self).__init__()
        self.title("文本控件学习")

        self.text=tk.Text(self,width=30,height=20,bg='lightblue')
        self.text.pack(side=tk.LEFT,anchor=tk.NW,pady=10,padx=10)
        

        self.btn=tk.Button(self,text='获取数据')
        self.btn2=tk.Button(self,text='插入数据')
        self.btn3=tk.Button(self,text='删除数据')
        self.btn4=tk.Button(self,text='获取光标位置')


        #布局
        self.layout()
        #绑定槽函数
        self.bind_slots()

    def layout(self):
        for btn in [self.btn,self.btn2,self.btn3,self.btn4]:
            btn.pack(side=tk.BOTTOM,pady=20,anchor=tk.W)

    def bind_slots(self):
        self.btn.config(command=self.get_text)
        self.btn2.config(command=self.insert_text)
        self.btn3.config(command=self.delete_text)
        self.btn4.config(command=self.text_cursor)

    def get_text(self):
        data=self.text.get(0.0,tk.END)
        print(data)

    def insert_text(self):
        data='9999'
        self.text.insert('1.2',data)

    def delete_text(self):
        self.text.delete(1.0,'1.end')

    def text_cursor(self):
        pass









if __name__ == '__main__':
    win=Window()
    win.geometry("500x500")

    win.mainloop()

菜单栏



class Window(tk.Tk):
    def __init__(self):
        super(Window, self).__init__()
        self.title("菜单栏")

        #创建一个菜单栏
        menu=tk.Menu(self)

        #给菜单栏添加一级选项
        menu.add_command(label="新建",command=lambda :print('new file'))
        menu.add_command(label="设置",command=lambda :print('set'))
        menu.add_command(label='退出',command=lambda :print('退出'))

        #给root配置菜单栏
        self.config(menu=menu)




if __name__ == '__main__':
    win=Window()
    win.geometry("500x500")

    win.mainloop()

二级菜单

import tkinter as tk




class Window(tk.Tk):
    def __init__(self):
        super(Window, self).__init__()
        self.title("二级菜单栏")

        #1.0创建一个菜单栏
        menu=tk.Menu(self)
        #1.2使用一级菜单栏创建二级菜单栏
        file_menu=tk.Menu(menu)


        #1.3给二级菜单栏添加选项
        file_menu.add_command(label="新建",command=lambda :print('new file'))
        file_menu.add_command(label="设置",command=lambda :print('set'))
        file_menu.add_command(label='退出',command=lambda :print('退出'))

        #1.4将二级菜单栏绑定到一级菜单栏
        menu.add_cascade(label="文件",menu=file_menu)

        #给root配置菜单栏
        self.config(menu=menu)




if __name__ == '__main__':
    win=Window()
    win.geometry("500x500")

    win.mainloop()

多选按钮用法

import tkinter as tk

def func():
    select_options=[]
    for option,var in options.items():
        if var.get()==1:
            select_options.append(var.get())
    print('select_options',select_options)


root=tk.Tk()
root.geometry("500x400")

options={
    "option 1":tk.IntVar(),
    "option 2":tk.IntVar(),
    "option 3":tk.IntVar(),
    "option 4":tk.IntVar(),
}

for option,var in options.items():
    checkbutton=tk.Checkbutton(root,text=option,variable=var)
    checkbutton.pack(pady=10)

btn=tk.Button(root,text='click',command=func)
btn.pack(pady=10)


root.mainloop()

combox用法

# ComboBox 在 tkinter 中有以下常用的事件:
#
# 1. `<FocusIn>`:当 ComboBox 获得焦点时触发的事件。
# 2. `<FocusOut>`:当 ComboBox 失去焦点时触发的事件。
# 3. `<Button-1>`:当用户单击 ComboBox 时触发的事件。
# 4. `<Return>`:当用户在 ComboBox 中按下回车键时触发的事件。
# 5. `<Down>`:当用户按下下箭头键时触发的事件。
# 6. `<KeyRelease>`:当用户释放任何键时触发的事件。
#
# 您可以使用 `bind()` 方法将这些事件与相应的处理函数绑定,以便在事件发生时执行特定的操作。
#
# 以下是一个示例代码,演示了如何绑定 ComboBox 的事件:


import tkinter as tk
from tkinter import ttk

def on_focus_in(event):
    print("ComboBox gained focus")

def on_focus_out(event):
    print("ComboBox lost focus")

def on_click(event):
    print("ComboBox clicked")

def on_return(event):
    print("Return key pressed")

def on_down(event):
    print("Down arrow key pressed")

def on_key_release(event):
    # print("Key released")
    print(combo_box.get())

root = tk.Tk()

combo_values = ["Option 1", "Option 2", "Option 3"]
combo_box = tk.ttk.Combobox(root, values=combo_values)
combo_box.pack()

combo_box.bind("<FocusIn>", on_focus_in)
combo_box.bind("<FocusOut>", on_focus_out)
combo_box.bind("<Button-1>", on_click)
combo_box.bind("<Return>", on_return)
combo_box.bind("<Down>", on_down)
combo_box.bind("<KeyRelease>", on_key_release)

root.mainloop()

#
# 在上述代码中,我们定义了几个处理函数,分别对应不同的 ComboBox 事件。我们通过 `bind()` 方法将每个事件与相应的处理函数绑定。
#
# 当 ComboBox 获得焦点、失去焦点、单击、按下回车键、按下下箭头键或释放任何键时,将分别调用相应的处理函数。
#
# 希望这个示例能帮助您了解 ComboBox 的事件和如何绑定它们。

当用户在下拉框中选择了一个选项时,可以通过绑定事件来处理选择事件。

在 tkinter 中,下拉框的选择事件是 `<ComboboxSelected>`。要绑定该事件,可以使用 `bind()` 方法,如下所示:

```python
combobox.bind("<<ComboboxSelected>>", on_select)
```

在上述代码中,我们通过 `bind()` 方法将 `on_select()` 函数绑定到下拉框的选择事件上。当用户在下拉框中选择了一个选项时,将自动调用 `on_select()` 函数。

下面是一个完整的示例代码,演示了如何在下拉框选择事件发生时触发处理函数:

```python
import tkinter as tk
from tkinter import ttk

def on_select(event):
    selected_option = combobox.get()
    print("Selected option:", selected_option)

root = tk.Tk()

options = ["Option 1", "Option 2", "Option 3"]

combobox = ttk.Combobox(root, values=options)
combobox.bind("<<ComboboxSelected>>", on_select)
combobox.pack()

root.mainloop()
```

在上述代码中,我们定义了一个 `on_select()` 函数,该函数将在下拉框选择事件发生时被调用。在函数中,我们获取当前选择的选项,并打印出来。

然后,我们创建了一个下拉框 `combobox`,并通过 `bind()` 方法将 `on_select()` 函数绑定到下拉框的选择事件上。最后,我们将下拉框添加到窗口中并进入主循环。

希望这个示例能帮助您理解如何在 tkinter 中处理下拉框的选择事件。

import tkinter as tk
from tkinter import ttk

def func():
    selection=var.get()
    print(selection)

def on_selected(event):
    data=combox.get() #注意,pack()写在一行会出错,因为返回值为None,所以要单独pack()布局
    print(data)

root=tk.Tk()
root.geometry("500x400")


options=['option1','option2','option3','option4']
var=tk.StringVar()
var.set(options[1])

combox=ttk.Combobox(root,textvariable=var,values=options)
combox.pack()
combox.bind('<<ComboboxSelected>>',on_selected) #注意这里是双尖括号《》

btn=ttk.Button(root,text='click',command=func).pack()


root.mainloop()

Spinbox

import tkinter as tk
from tkinter import ttk

def func():
    selection=spinbox.get()
    print(selection)
 


root=tk.Tk()
root.geometry("500x400")

var=tk.IntVar()

spinbox=tk.Spinbox(root,from_=1,to=10,textvariable=var)
spinbox.pack()





btn=ttk.Button(root,text='click',command=func).pack()


root.mainloop()
# Spinbox 在 tkinter 中有以下常用的事件:
#
# 1. `<FocusIn>`:当 Spinbox 获得焦点时触发的事件。
# 2. `<FocusOut>`:当 Spinbox 失去焦点时触发的事件。
# 3. `<Return>`:当用户在 Spinbox 中按下回车键时触发的事件。
# 4. `<Up>`:当用户按下上箭头键时触发的事件。
# 5. `<Down>`:当用户按下下箭头键时触发的事件。
# 6. `<Button-1>`:当用户单击 Spinbox 时触发的事件。
#
# 您可以使用 `bind()` 方法将这些事件与相应的处理函数绑定,以便在事件发生时执行特定的操作。
#
# 以下是一个示例代码,演示了如何绑定 Spinbox 的事件:


import tkinter as tk

def on_focus_in(event):
    print("Spinbox gained focus")

def on_focus_out(event):
    print("Spinbox lost focus")

def on_return(event):
    print("Return key pressed")

def on_up(event):
    print("Up arrow key pressed")

def on_down(event):
    print("Down arrow key pressed")

def on_click(event):
    print("Spinbox clicked")

root = tk.Tk()

spinbox = tk.Spinbox(root)
spinbox.pack()

spinbox.bind("<FocusIn>", on_focus_in)
spinbox.bind("<FocusOut>", on_focus_out)
spinbox.bind("<Return>", on_return)
spinbox.bind("<Up>", on_up)
spinbox.bind("<Down>", on_down)
spinbox.bind("<Button-1>", on_click)

root.mainloop()

#
# 在上述代码中,我们定义了几个处理函数,分别对应不同的 Spinbox 事件。我们通过 `bind()` 方法将每个事件与相应的处理函数绑定。
#
# 当 Spinbox 获得焦点、失去焦点、按下回车键、按下上下箭头键或点击 Spinbox 时,将分别调用相应的处理函数。
# '''

Progressbar用法


import tkinter as tk
from tkinter import ttk

def start_progress():
    progress_bar.start()

def stop_progress():
    progress_bar.stop()

root = tk.Tk()

progress_bar = ttk.Progressbar(root, mode='indeterminate')
progress_bar.pack()

start_button = tk.Button(root, text="Start", command=start_progress)
start_button.pack()

stop_button = tk.Button(root, text="Stop", command=stop_progress)
stop_button.pack()

root.mainloop()

在 tkinter 中,Progressbar 控件没有内置的事件。它通常用于显示任务的进度,而不需要与用户进行交互。

然而,您可以使用其他控件(如 Button、Canvas 等)与 Progressbar 结合使用,并为这些控件绑定事件。以下是一些常见的控件事件:

1. `<Button-1>`:当用户单击鼠标左键时触发的事件。
2. `<Button-2>`:当用户单击鼠标中键(滚轮)时触发的事件。
3. `<Button-3>`:当用户单击鼠标右键时触发的事件。
4. `<Double-Button-1>`:当用户双击鼠标左键时触发的事件。
5. `<Enter>`:当鼠标进入控件区域时触发的事件。
6. `<Leave>`:当鼠标离开控件区域时触发的事件。
7. `<Key>`:当用户按下任意键盘按键时触发的事件。
8. `<Return>`:当用户按下回车键时触发的事件。
9. `<FocusIn>`:当控件获得焦点时触发的事件。
10. `<FocusOut>`:当控件失去焦点时触发的事件。

您可以使用 `bind()` 方法将这些事件与相应的处理函数绑定,以便在事件发生时执行特定的操作。

在上述代码中,我们创建了一个按钮,并使用 `bind()` 方法将 `<Button-1>` 事件与 `button_clicked` 函数绑定。当用户单击按钮时,将执行 `button_clicked` 函数。

08-03 00:09