Python tkinter相关Demo演示

Tkinter实现透明窗口最简单的方法

import tkinter as tk

root = tk.Tk()
root.title('Tkinter Window Demo')
root.geometry('600x400+50+50')
root.resizable(False, False)
root.attributes('-alpha', 0.5)

root.mainloop()

在这里插入图片描述
动态更改鼠标样式

import tkinter as tk

root = tk.Tk()
root.title('Tkinter Window Demo')
root.geometry('600x400+50+50')
# root.resizable(False, False) # 禁止更改窗口大小
root.attributes('-alpha', 0.5)


def change_cursor(event):
    if event.x in range(100, 300): # 当鼠标从距离零点100 到 300 的 x 坐标上开始时,光标变为忙碌状态。
        root.config(cursor="watch")
    else:
        root.config(cursor="")


root.bind("<Motion>", change_cursor)


root.mainloop()

在这里插入图片描述

所有ttk 小部件都有 cursor 参数,允许您在鼠标悬停它们时更改光标

import tkinter as tk
from tkinter import ttk
from ttkbootstrap.constants import *

root = tk.Tk()
root.title('Tkinter Window Demo')
# root.geometry('300x300')
# root.resizable(False, False) # 禁止更改窗口大小
root.attributes('-alpha', 0.7)


"""
cursor_name:
arrow
based_arrow_down
based_arrow_up
boat
bogosity
bottom_left_corner
bottom_right_corner
bottom_side
bottom_tee
box_spiral
center_ptr
circle
clock
coffee_mug
cross
cross_reverse
crosshair
diamond_cross
dot
dotbox
double_arrow
draft_large
draft_small
draped_box
exchange
fleur
gobbler
gumby
hand1
hand2
heart
icon
iron_cross
left_ptr
left_side
left_tee
leftbutton
ll_angle
lr_angle
man
middlebutton
mouse
pencil
pirate
plus
question_arrow
right_ptr
right_side
right_tee
rightbutton
rtl_logo
sailboat
sb_down_arrow
sb_h_double_arrow
sb_left_arrow
sb_right_arrow
sb_up_arrow
sb_v_double_arrow
shuttle
sizing
spider
spraycan
star
target
tcross
top_left_arrow
top_left_corner
top_right_corner
top_side
top_tee
trek
ul_angle
umbrella
ur_angle
watch
xterm
X_cursor
"""
b1 = ttk.Button(root, text="Button 1", bootstyle=SUCCESS, cursor="watch")
b1.pack(side=LEFT, padx=5, pady=10)

b2 = ttk.Button(root, text="Button 2", bootstyle=(INFO, OUTLINE), cursor="trek")
b2.pack(side=LEFT, padx=5, pady=10)

root.mainloop()

在这里插入图片描述
树状图分层数据

import tkinter as tk
from tkinter import ttk
from ttkbootstrap.constants import *

# create root window
root = tk.Tk()
root.title('Treeview Demo - Hierarchical Data')
root.geometry('400x200')

# configure the grid layout
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)


# create a treeview
tree = ttk.Treeview(root)
tree.heading('#0', text='Departments', anchor=tk.W)


# adding data
tree.insert('', tk.END, text='目录', iid=0, open=False)
tree.insert('', tk.END, text='主页', iid=1, open=False)
tree.insert('', tk.END, text='博客', iid=2, open=False)
tree.insert('', tk.END, text='联系', iid=3, open=False)
tree.insert('', tk.END, text='帮助', iid=4, open=False)

# adding children of first node
tree.insert('', tk.END, text='文件夹1', iid=5, open=False)
tree.insert('', tk.END, text='文件夹2', iid=6, open=False)
tree.move(5, 0, 0) # 5(需要添加的子节点iid) 0(代表向iid=0的节点下添加) 0(文件索引默认0开始有五个就是 0,1,2,3,4)
tree.move(6, 0, 1)

tree.insert('', tk.END, text='文件1', iid=7, open=False)
tree.insert('', tk.END, text='文件2', iid=8, open=False)
tree.move(7, 5, 0)
tree.move(8, 6, 1)

# place the Treeview widget on the root window
tree.grid(row=0, column=0, sticky=tk.NSEW)

# run the app
root.mainloop()

在这里插入图片描述
画布事件功能

import tkinter as tk

root = tk.Tk()
root.geometry('800x600')
root.title('Canvas Demo - Binding Event')

canvas = tk.Canvas(root, width=600, height=400, bg='white')
canvas.pack(anchor=tk.CENTER, expand=True)

python_image = tk.PhotoImage(file='暴走.gif')
image_item = canvas.create_image(
    (300, 200),
    image=python_image
)
canvas.tag_bind(
    image_item,
    '<Button-1>',
    lambda e: canvas.delete(image_item)
)

root.mainloop()

在这里插入图片描述
不同帧之间的切换

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showerror
from ttkbootstrap.constants import *

class TemperatureConverter:
    @staticmethod
    def fahrenheit_to_celsius(f, format=True):
        result = (f - 32) * 5/9
        if format:
            return f'{f} Fahrenheit = {result:.2f} Celsius'
        return result

    @staticmethod
    def celsius_to_fahrenheit(c, format=True):
        result = c * 9/5 + 32
        if format:
            return f'{c} Celsius = {result:.2f} Fahrenheit'
        return result


class ConverterFrame(ttk.Frame):
    def __init__(self, container, unit_from, converter):
        super().__init__(container)

        self.unit_from = unit_from
        self.converter = converter

        # field options
        options = {'padx': 5, 'pady': 0}

        # temperature label
        self.temperature_label = ttk.Label(self, text=self.unit_from)
        self.temperature_label.grid(column=0, row=0, sticky='w',  **options)

        # temperature entry
        self.temperature = tk.StringVar()
        self.temperature_entry = ttk.Entry(self, textvariable=self.temperature)
        self.temperature_entry.grid(column=1, row=0, sticky='w', **options)
        self.temperature_entry.focus()

        # button
        self.convert_button = ttk.Button(self, text='Convert')
        self.convert_button.grid(column=2, row=0, sticky='w', **options)
        self.convert_button.configure(command=self.convert)

        # result label
        self.result_label = ttk.Label(self)
        self.result_label.grid(row=1, columnspan=3, **options)

        # add padding to the frame and show it
        self.grid(column=0, row=0, padx=5, pady=5, sticky="nsew")

    def convert(self, event=None):
        """  Handle button click event
        """
        try:
            input_value = float(self.temperature.get())
            result = self.converter(input_value)
            self.result_label.config(text=result)
        except ValueError as error:
            showerror(title='Error', message=error)

    def reset(self):
        self.temperature_entry.delete(0, "end")
        self.result_label.text = ''


class ControlFrame(ttk.LabelFrame):
    def __init__(self, container):

        super().__init__(container)
        self['text'] = 'Options'

        # radio buttons
        self.selected_value = tk.IntVar()

        ttk.Radiobutton(
            self,
            text='F to C',
            value=0,
            variable=self.selected_value,
            command=self.change_frame).grid(column=0, row=0, padx=5, pady=5)

        ttk.Radiobutton(
            self,
            text='C to F',
            value=1,
            variable=self.selected_value,
            command=self.change_frame).grid(column=1, row=0, padx=5, pady=5)

        self.grid(column=0, row=1, padx=5, pady=5, sticky='ew')

        # initialize frames
        self.frames = {}
        self.frames[0] = ConverterFrame(
            container,
            'Fahrenheit',
            TemperatureConverter.fahrenheit_to_celsius)
        self.frames[1] = ConverterFrame(
            container,
            'Celsius',
            TemperatureConverter.celsius_to_fahrenheit)

        self.change_frame()

    def change_frame(self):
        frame = self.frames[self.selected_value.get()]
        frame.reset()
        frame.tkraise()


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title('Temperature Converter')
        self.geometry('370x120')
        self.resizable(False, False)


if __name__ == "__main__":
    app = App()
    ControlFrame(app)
    app.mainloop()

在这里插入图片描述

颜色选择器

import tkinter as tk
from tkinter import ttk
from tkinter.colorchooser import askcolor
from ttkbootstrap.constants import *

root = tk.Tk()
root.title('Tkinter Color Chooser')
root.geometry('300x150')


def change_color():
    colors = askcolor(title="Tkinter Color Chooser")
    root.configure(bg=colors[1])


ttk.Button(
    root,
    text='Select a Color',
    command=change_color).pack(expand=True)


root.mainloop()

iShot_2022-11-12_11.35.29

tkinter线程GUI程序Demo

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showerror
from threading import Thread
import requests
from ttkbootstrap.constants import *

class AsyncDownload(Thread):
    def __init__(self, url):
        super().__init__()

        self.html = None
        self.url = url

    def run(self):
        response = requests.get(self.url)
        self.html = response.text


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title('Webpage Download')
        self.geometry('870x400')
        self.resizable(0, 0)

        self.create_header_frame()
        self.create_body_frame()
        self.create_footer_frame()

    def create_header_frame(self):

        self.header = ttk.Frame(self)
        # configure the grid
        self.header.columnconfigure(0, weight=1)
        self.header.columnconfigure(1, weight=10)
        self.header.columnconfigure(2, weight=1)
        # label
        self.label = ttk.Label(self.header, text='URL')
        self.label.grid(column=0, row=0, sticky=tk.W)

        # entry
        self.url_var = tk.StringVar()
        self.url_entry = ttk.Entry(self.header,
                                   textvariable=self.url_var,
                                   width=80)

        self.url_entry.grid(column=1, row=0, sticky=tk.EW)

        # download button
        self.download_button = ttk.Button(self.header, text='Download')
        self.download_button['command'] = self.handle_download
        self.download_button.grid(column=2, row=0, sticky=tk.E)

        # attach the header frame
        self.header.grid(column=0, row=0, sticky=tk.NSEW, padx=10, pady=10)

    def handle_download(self):
        url = self.url_var.get()
        if url:
            self.download_button['state'] = tk.DISABLED
            self.html.delete(1.0, "end")

            download_thread = AsyncDownload(url)
            download_thread.start()

            self.monitor(download_thread)
        else:
            showerror(title='Error',
                      message='Please enter the URL of the webpage.')

    def monitor(self, thread):
        if thread.is_alive():
            # check the thread every 100ms
            self.after(100, lambda: self.monitor(thread))
        else:
            self.html.insert(1.0, thread.html)
            self.download_button['state'] = tk.NORMAL

    def create_body_frame(self):
        self.body = ttk.Frame(self)
        # text and scrollbar
        self.html = tk.Text(self.body, height=20, width=92)
        self.html.grid(column=0, row=1)

        scrollbar = ttk.Scrollbar(self.body,
                                  orient='vertical',
                                  command=self.html.yview)

        scrollbar.grid(column=1, row=1, sticky=tk.NS)
        self.html['yscrollcommand'] = scrollbar.set

        # attach the body frame
        self.body.grid(column=0, row=1, sticky=tk.NSEW, padx=10, pady=10)

    def create_footer_frame(self):
        self.footer = ttk.Frame(self)
        # configure the grid
        self.footer.columnconfigure(0, weight=1)
        # exit button
        self.exit_button = ttk.Button(self.footer,
                                      text='Exit',
                                      command=self.destroy)

        self.exit_button.grid(column=0, row=0, sticky=tk.E)

        # attach the footer frame
        self.footer.grid(column=0, row=2, sticky=tk.NSEW, padx=10, pady=10)


if __name__ == "__main__":
    app = App()
    app.mainloop()

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: TkinterPython中的一个GUI编程库,可以用来创建图形用户界面。它提供了丰富的工具和功能,使开发者能够创建交互式和功能强大的应用程序。Tkinter DemoTkinter库中的一个示例应用程序,用于展示Tkinter的各种功能和特性。 Tkinter Demo展示了Tkinter库中许多常用的小部件和布局选项。它包括文本框、按钮、标签、滚动条等常见的界面元素,并演示了它们的用法和功能。通过Tkinter Demo开发者可以学习如何创建这些小部件并将它们放置在适当的位置。 除了小部件和布局,Tkinter Demo还展示了Tkinter库中其他功能,如对话框、颜色选择器、字体选择器等。开发者可以通过使用这些功能来增强他们的应用程序。 Tkinter Demo的一个重要的特点是它的易用性。它提供了用户友好的界面,使用户能够轻松地浏览不同的示例,并理解如何使用它们。同时,示例代码也提供了非常有用的参考,开发者可以通过查看代码来学习如何在自己的应用程序中使用特定的Tkinter功能。 总之,Tkinter Demo是一个非常有用的工具,旨在帮助开发者掌握Tkinter库的各种功能。通过使用Tkinter Demo开发者可以快速了解Tkinter的基本概念和用法,并将其应用于自己的应用程序中。 ### 回答2: TkinterPython中用于创建图形用户界面(GUI)的标准工具包。它提供了各种组件,如按钮、标签、文本框等,可以很方便地构建交互式应用程序。 Tkinter Demo是一个示例程序,旨在展示Tkinter工具包的各种功能和用法。它包含了许多不同的小程序,每个小程序都展示了Tkinter的一个特定功能。通过运行这些小程序,我们可以快速了解和学习如何使用Tkinter来构建具有各种功能的GUI应用程序。 例如,Tkinter Demo中的一个小程序可以展示如何创建一个简单的窗口,设置窗口的标题和尺寸,并给窗口添加按钮和标签。另一个小程序可以演示如何使用Tkinter来创建一个简易的计算器应用程序,用户可以进行基本的数学运算。还有其他小程序可以展示Tkinter中更高级的功能,如列表框、滚动条、菜单等。 通过运行Tkinter Demo,我们可以从实际例子中学习如何使用Tkinter提供的各种组件和功能。这对于那些想要学习创建GUI应用程序的Python开发者来说是非常有用的。我们可以看到每个小程序的源代码,并在自己的项目中进行修改和定制,以满足自己的需求。 总之,Tkinter Demo是一个用于展示Tkinter功能和用法的示例程序,通过运行它,我们可以学习如何使用Tkinter开发GUI应用程序,并从中获取灵感和指导。 ### 回答3: tkinter是一个非常流行的Python图形界面(GUI)库,可以用来创建各种用户界面。它提供了丰富的功能和易于使用的接口,被广泛应用于开发桌面应用程序。 一个tkinterdemo可以是一个简单的图形界面程序,用来展示tkinter的基本用法和功能。这个demo可以包括以下几个部分: 1. 窗口和组件:通过tkinter可以创建一个窗口,该窗口可以包含各种组件如按钮、文本框、标签等。在demo中可以展示如何创建窗口和各种组件,并给它们添加一些基本的属性。 2. 事件处理:tkinter的一个重要特性是它可以响应用户的操作事件,如点击按钮、输入文本等。在demo中可以演示如何给组件添加事件处理函数,并实现一些简单的交互功能。 3. 布局管理:tkinter提供了几种布局管理器,用来控制组件在窗口中的位置和大小。在demo中可以展示如何使用布局管理器来实现灵活的界面布局。 4. 图形绘制:除了常见的界面组件,tkinter还提供了一些画布类,用来绘制图形和处理图形操作。在demo中可以展示如何使用画布类来实现一些简单的图形绘制和交互。 通过展示这些特性,tkinterdemo可以帮助初学者快速了解和掌握tkinter的基本用法和功能。同时,对于有一定经验的开发者,demo也可以作为一个参考,提供一些可供借鉴的实现思路。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ko-walski

太难了,求鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值