如何给 Python Tkinter 给窗口加标题、改变 button 文本?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何给 Python Tkinter 给窗口加标题、改变 button 文本?相关的知识,希望对你有一定的参考价值。

我用的是 Tkinter.Tk() 创建的窗口,然后仅仅 pack() 了一个 button 进去,我怎样生成 button 时设定 command 所指向的函数可以改变这个按钮的 text ?顺便问一下怎样改变窗口标题。

通过title方法修改窗口标题,通过StringVar对象的set方法修改按钮的标题。以下代码为python3的。

from tkinter import *
root = Tk()
root.title("窗口标题") #在这里修改窗口的标题
root.mainloop()from tkinter import *
root = Tk()
strvar = StringVar()
strvar.set("原文本") #初始的按钮文本
def handler():
    strvar.set("新文本") #要改要成的文本
btn = Button(root, textvariable=strvar, command=handler) #textvariable设置原文本,command=handler是设置按钮要执行的代码
btn.pack()
root.mainloop()

 

参考技术A from Tkinter import *
root = Tk()
strvar = StringVar()
strvar.set("Please Click Me.")
def handler():
strvar.set("You Have Clicked Me.")
btn = Button(root, textvariable=strvar, command=handler)
btn.pack()
root.mainloop()

from Tkinter import *
root = Tk()
root.title("Hello, World!")
root.mainloop()

在贴吧里也回复过了啊啊, 抄书也是有魅力的.本回答被提问者采纳

如何从小部件的函数返回值,并将其传递给 Tkinter,Python 中的另一个小部件的函数

【中文标题】如何从小部件的函数返回值,并将其传递给 Tkinter,Python 中的另一个小部件的函数【英文标题】:How to return value from a widget`s function, and pass it to another widget's function in Tkinter, Python 【发布时间】:2019-06-22 05:28:36 【问题描述】:

我正在创建一个包含两个按钮的简单 GUI。 第一个按钮用于选择视频文件,第二个按钮获取视频文件路径然后播放(使用 OpenCV)。

问题是我无法从第一个按钮绑定函数返回文件路径并将其传递给第二个按钮绑定函数。

我将“文件名”定义为全局变量,但“文件名”仍未在“PlayVideo()”函数中定义。

以下是我的代码:

from tkinter import *
from tkinter import filedialog
from tkinter import messagebox

global filename


def OpenFile():
    filename =  filedialog.askopenfilename(title = "Select file",filetypes = ( ("MP4 files","*.mp4"), ("WMV files","*.wmv"), ("AVI files","*.avi") ))
    print(filename)


def PlayVideo():
    try:
        import cv2

        cap = cv2.VideoCapture(filename)

        while(cap.isOpened()):

            ret, frame = cap.read()

            cv2.imshow('frame', frame)

            if cv2.waitKey(25) & 0xFF == ord('q'):
                break
        cap.release()
        cv2.destroyAllWindows()

    except:
        messagebox.showinfo(title='Video file not found', message='Please select a video file.')


root = Tk()

selectButton = Button(root, text = 'Select video file', command=OpenFile)
playButton = Button(root, text = 'Play', command=PlayVideo)

selectButton.grid(row=0)
playButton.grid(row=1)

root.mainloop()   

当我选择一个视频文件时,它的路径会被打印出来。但。当我点击播放按钮时,会显示错误信息(请选择一个视频文件)。

【问题讨论】:

【参考方案1】:

您需要在OpenFilePlayVideo这两个函数的开头添加这一行

global filename

当您添加这一行时,您的程序知道,它必须使用全局变量“filename”,而不是在该函数中创建/使用局部变量“filename”。

更新:

为了避免使用全局变量,你可以像这样使用可变类型。

from tkinter import *
from tkinter import filedialog
from tkinter import messagebox

def OpenFile(file_record):
    file_record['video1'] =  filedialog.askopenfilename(title = "Select file",filetypes = ( ("MP4 files","*.mp4"), ("WMV files","*.wmv"), ("AVI files","*.avi") ))
    print(file_record['video1'])

def PlayVideo(file_record):

    try:
        import cv2
        cap = cv2.VideoCapture(file_record['video1'])

        while(cap.isOpened()):
            ret, frame = cap.read()
            cv2.imshow('frame', frame)
            if cv2.waitKey(25) & 0xFF == ord('q'):
                break

        cap.release()
        cv2.destroyAllWindows()

    except:
        messagebox.showinfo(title='Video file not found', message='Please select a video file.')


root = Tk()
filename_record = 
selectButton = Button(root, text = 'Select video file', command=lambda: OpenFile(filename_record))
playButton = Button(root, text = 'Play', command=lambda: PlayVideo(filename_record))

selectButton.grid(row=0)
playButton.grid(row=2)

root.mainloop()

【讨论】:

谢谢。有效。有没有其他方法来处理这个?如果我有几个变量,也许使用全局变量并不能让我对函数之间的变量流进行足够的控制。我试过“lambda”,但它似乎只在输入参数是参数而不是变量时才有效。 您可以使用 lambda 轻松地将可变变量传递给函数。请分享您尝试了什么,什么失败了。 谢谢。有用。但是,我不明白“file_record”是如何在函数之间流动的。 这就是可变变量类型的特点。字典、列表是可变类型,因此当您将它们传递给函数时,可以从函数中访问和更改原始变量的值;但是对于像int这样的非可变类型,只有字符串变量的值被传递给函数,所以原始变量的值不能改变。

以上是关于如何给 Python Tkinter 给窗口加标题、改变 button 文本?的主要内容,如果未能解决你的问题,请参考以下文章

python程序的窗口化

Python Tkinter 中的单选按钮值

过分了,别人用来做桌面应用开发,这家伙却用来撩妹--上帝给你开一个窗口(Tkinter)

过分了,别人用来做桌面应用开发,这家伙却用来撩妹--上帝给你开一个窗口(Tkinter)

如何从小部件的函数返回值,并将其传递给 Tkinter,Python 中的另一个小部件的函数

Tkinter实现窗口菜单栏