在tkinter中生成自定义对话框
本文最后更新于 479 天前,其中的信息可能已经有所发展或是发生改变。

小编在写那个Python Base64 GUI工具时,已经说过了,因为图省事,用的tkinter库,这道真是不用找三方库。但是tkinter的鸡肋属性(个人感觉)也给我带来了很多困扰:就譬如像生成自定义对话框,就不是那么容易,加上百度上的资料少之又少·········我写这个还得靠我那个渣渣的英语水平勉强去看Google上的英文技术社区,现在想起来,还真的是不容易的

我为什么要在写这篇帖子呢?因为经过小编亲自测试,百度上给的好多方式都是错误的,而且大多粘贴而来
废话说太多,下面贴代码:

from tkinter import *
#这里关于与 import tkinter 的区别不在说明,百度上有的
import tkinter.messagebox as messagebox
#载入消息框,下面要用到

root = Tk()    

root.title("一个可爱的小窗口")

#root.iconbitmap('XXX.ico')
#指定图标,可以不使用tkinter的鸡肋图标

root.resizable(False, False)
#限制root不能变化大小

root.geometry("250x50+200+20")
#限定root窗口的大小

def newWindow():
    CustomDialog = customDialog(root)
    #customDialog要传入父窗口的名称也就是下面的parent
    #这个回调函数要写在按钮上面,否则会找不到

Button(root,text="点我有惊喜",command=newWindow).pack(side="right")
#生成一个按钮用来生成新窗体

Button(root,text="这是一个无聊的按钮",stat="disable").pack(side="left")
    
#另外,千万不要把实例化类的名称写的跟原来的类名相同!!!否则第二次调用时就会出现Callable错误
#这是因为如果名称相同,第二次就没办法在实例化类了,名称是相同的,就没办法实例化已经实例化的类

#下面就是我们的可爱的自定义对话框了
class customDialog:
    #定义初始化函数,自定义对话框的布局还有内容都在这里写
    #parent是父窗口,也就是root
    def __init__(self,parent):
        newWindow = self.newWindow = Toplevel(parent)
        newWindow.title("我是新窗口")
        newWindow.resizable(False,False)
        #newWindow.iconbitmap('ABC.ico')
        #新窗口的名称可以新定义,图标也可以不一样,网上说的Toplevel没有这些属性的说法是错误的
        
        Label(newWindow,text='我是一个新的可爱的小窗口').pack()
        
        Button(newWindow,text="一个关闭的按钮",command=self.button1).pack(side='left')
        Button(newWindow,text="第二个小按钮",command=self.button2).pack(side='right')
        Button(newWindow,text="点我又不会怀孕",command=self.button3).pack()
        #生成三个小按钮,用来销毁窗口和加一些功能

    def button1(self):
        self.newWindow.destroy()
        #这句话用来销毁这个窗口,下面都是一些小功能,可以自己定义改的
        
    def button2(self):
        messagebox.showinfo('一个info对话框','以后没事就来N多鱼的博客转转哦~~')
        
    def button3(self):
        import webbrowser
        webbrowser.open('https://init.blog')
    #这几个回调函数可以写在外面也可以写在里面,写在外面要加global关键字,还要去掉self,不方便
root.mainloop()
#主窗体循环
#大家测试,应该可以注意到,这个新窗口跟主窗体是独立的,可以生成很多
#但是因为parent是root所以依赖于root,主窗口关闭,他们也就关闭了~~~

这个是效果:

tkinter自定义对话框
tkinter自定义对话框

尽力给大家讲得详细一些,如果大家还有什么疑问,可以在底下留言哦~~

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇