标签: tkinter

如何在不知道小部件的字体系列/大小的情况下更改小部件的字体样式?

有没有办法在不知道小部件的字体系列和字体大小的情况下更改Tkinter小部件的字体样式?

使用案例:我们使用标准Tkinter小部件(标签,条目,文本等)创建UI .在我们的应用程序运行时,我们可能希望使用该.config()方法动态地将这些小部件的字体样式更改为粗体和/或斜体.遗憾的是,如果没有指定字体的族和大小,似乎无法指定字体规范.

以下是我们想要做的事情的例子,但这些例子都不起作用:

widget.config(font='bold')
Run Code Online (Sandbox Code Playgroud)

要么

widget.config(font=( None, None, 'bold' ))
Run Code Online (Sandbox Code Playgroud)

python user-interface fonts tkinter

44
推荐指数
4
解决办法
8万
查看次数

如何从窗口中删除Tkinter小部件?

我有一个我想要动态更改的Tkinter小部件列表.

如何从窗口中完全删除小部件?

python tkinter

44
推荐指数
3
解决办法
10万
查看次数

Tkinter:如何使用线程来防止主事件循环"冻结"

我有一个小的GUI测试,带有"开始"按钮和进度条.期望的行为是:

  • 单击开始
  • 进度条振荡5秒
  • 进度条停止

观察到的行为是"开始"按钮冻结5秒钟,然后显示进度条(无振荡).

到目前为止,这是我的代码:

class GUI:
    def __init__(self, master):
        self.master = master
        self.test_button = Button(self.master, command=self.tb_click)
        self.test_button.configure(
            text="Start", background="Grey",
            padx=50
            )
        self.test_button.pack(side=TOP)

    def progress(self):
        self.prog_bar = ttk.Progressbar(
            self.master, orient="horizontal",
            length=200, mode="indeterminate"
            )
        self.prog_bar.pack(side=TOP)

    def tb_click(self):
        self.progress()
        self.prog_bar.start()
        # Simulate long running process
        t = threading.Thread(target=time.sleep, args=(5,))
        t.start()
        t.join()
        self.prog_bar.stop()

root = Tk()
root.title("Test Button")
main_ui = GUI(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

基于从布赖恩奥克利的信息在这里,我明白,我需要使用线程.我尝试创建一个线程,但我猜测,因为线程是从主线程中启动的,所以没有用.

我有想法放置在不同的类中的逻辑部分,以及从该类,类似于由A.罗达斯示例代码内实例化GUI 这里.

我的问题:

我无法弄清楚如何编码它,以便这个命令:

self.test_button = Button(self.master, command=self.tb_click)
Run Code Online (Sandbox Code Playgroud)

调用位于另一个类中的函数.这是一件坏事还是可能?我如何创建一个可以处理self.tb_click的第二类?我试着跟随A. Rodas的示例代码,它的工作非常精彩.但是我无法弄清楚如何在触发动作的Button小部件的情况下实现他的解决方案.

如果我应该在单个GUI类中处理线程,那么如何创建一个不干扰主线程的线程呢?

python multithreading tkinter event-loop progress-bar

43
推荐指数
4
解决办法
7万
查看次数

Tk的背景颜色在Python中

我正在用Tkinter编写幻灯片程序,但我不知道如何将背景颜色更改为黑色而不是标准浅灰色.如何才能做到这一点?

import os, sys
import Tkinter
import Image, ImageTk
import time

root = Tkinter.Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.overrideredirect(1)
root.geometry("%dx%d+0+0" % (w, h))
root.focus_set()
root.bind("<Escape>", lambda e: e.widget.quit())
image = Image.open(image_path+f)
tkpi = ImageTk.PhotoImage(image)        
label_image = Tkinter.Label(root, image=tkpi)
label_image.place(x=0,y=0,width=w,height=h)
root.mainloop(0)
Run Code Online (Sandbox Code Playgroud)

python tk-toolkit tkinter

42
推荐指数
3
解决办法
19万
查看次数

更改Tkinter列表框选择时获取回调?

在Tkinter 中有多种方法可以获得回调Text或者Entry更改小部件,但是我没有找到一个用于回调的方法Listbox(我找不到的大部分事件文档是旧的还是不完整的).有没有办法为此生成一个事件?

python events tkinter

42
推荐指数
3
解决办法
4万
查看次数

如何清除Tkinter Canvas?

当我使用以下方式绘制形状时:

canvas.create_rectangle(10, 10, 50, 50, color="green")
Run Code Online (Sandbox Code Playgroud)

Tkinter是否记录了它的创建事实?

在我正在制作的一个简单游戏中,我的代码有一个Frame创建一堆矩形,然后绘制一个大的黑色矩形来清除屏幕,然后绘制另一组更新的矩形,依此类推.

我在内存中创建了数千个矩形对象吗?

我知道你可以将上面的代码分配给一个变量,但如果我不这样做,只是直接绘制到画布,它是否留在内存中,还是只是绘制像素,就像在HTML5画布中一样?

python tkinter python-3.x tkinter-canvas

42
推荐指数
2
解决办法
9万
查看次数

无法在 MacOS 上使用 pyenv Python 安装 tkinter

通过 pyenv 安装的 Python 版本无法导入tkinter

? python
Python 3.8.1 (default, Feb 29 2020, 11:45:59)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/factor/.pyenv/versions/3.8.1/lib/python3.8/tkinter/__init__.py", line 36, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'
>>>
Run Code Online (Sandbox Code Playgroud)

或者您可能会收到有关标头版本与二进制文件不匹配的消息:

DEPRECATION WARNING: The system version of Tk is deprecated …
Run Code Online (Sandbox Code Playgroud)

python macos tkinter pyenv

42
推荐指数
3
解决办法
1万
查看次数

适用于wxPython或Tkinter的GUI设计器的Nice IDE

我有一点使用Python开发小型命令行应用程序的经验.我想继续用Python开发GUI.从Python的可用GUI工具包中,我认为最喜欢的是wxPythonTkinter ; 但我不想一直自己编写所有的GUI代码.

这些工具包中是否有任何好的GUI IDE?它不需要是免费的或开源的.

python ide user-interface wxpython tkinter

41
推荐指数
3
解决办法
6万
查看次数

我什么时候需要在Tkinter应用程序中调用mainloop?

每个tkinter教程我都看到了tkinter.mainloop必须要求绘制窗口和要处理的事件的声明,并且它们总是调用此函数,即使在hello world程序中也是如此.但是,当我在交互式shell中尝试这些时,无需调用mainloop即可正确绘制窗口. 这个在tkinter中嵌入matplotlib图形的例子产生了一个相对复杂的应用程序,带有用于在tkinter窗口内平移,缩放和调整绘图大小的按钮,再次,如果你删除对mainloop的调用并在交互式shell中运行代码,这一切都有效. .当然,如果我在交互式shell之外运行脚本(删除了mainloop),程序结束得太快就看不到会发生什么,但如果我添加一个调用input 保持程序打开一切正常(我在Linux上运行python 3.2.2).

那么mainloop到底做了什么,什么时候需要调用呢?

编辑:澄清一下,如果我打开GNOME终端并输入

$python3
>>> import tkinter
>>> root = tkinter.Tk()
Run Code Online (Sandbox Code Playgroud)

一个窗口立即出现,而不必调用mainloop,更复杂的tkinter功能似乎也可以工作(例如,向窗口添加按钮).在IDLE中,需要调用mainloop.我的理解是,在调用mainloop之前,不应绘制任何内容,也不应处理任何事件.

python tkinter

41
推荐指数
2
解决办法
8万
查看次数

如何在tkinter中创建自调整大小的按钮网格?

我正在尝试使用Tkinter创建一个按钮网格(以实现可点击的单元格效果).

我的主要问题是我无法使grid按钮自动调整并适合父窗口.

例如,当我在网格上有大量按钮时,而不是缩小按钮以使网格适合窗口内部,我得到一个离开屏幕的拉伸框架.

我正在寻找的效果是网格填充所有可用空间,然后调整其单元格以适应该空间.我已阅读文档,但我仍然无法弄清楚如何使其工作.

这是基本代码,这是我的出发点:

def __init__(self):
    root = Tk()
    frame = Frame(root)
    frame.grid()

    #some widgets get added in the first 6 rows of the frame's grid          

    #initialize grid
    grid = Frame(frame)  
    grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2)

    #example values
    for x in range(60):
        for y in range(30):
            btn = Button(grid)
            btn.grid(column=x, row=y)

    root.mainloop()
Run Code Online (Sandbox Code Playgroud)

python grid tkinter button autoresize

40
推荐指数
2
解决办法
7万
查看次数