标签: tkinter

如何使用 python Tkinter 迭代图像?

如何使用python Tkinter迭代图像?

import tkinter as tk
from PIL import ImageTk, Image

win = tk.Tk()
win.geometry('800x500')  # set window size
win.resizable(0, 0)  # fix window

images = ['01.jpg', '02.jpg', '03.jpg']

def next_img():
   # show next image

for img in images:
    img = Image.open(img)
    img = ImageTk.PhotoImage(img)
    panel = tk.Label(win, image=img)
    panel.pack()
    btn = tk.Button(text='Next image', command=next_img)
    btn.pack()
win.mainloop()
Run Code Online (Sandbox Code Playgroud)

但我的面板没有显示任何图像。我希望面板等待我,然后我单击按钮以显示下一个图像。怎么解决呢。

python tkinter

0
推荐指数
1
解决办法
4102
查看次数

将值添加到树视图 Tkinter 中的特定列

我制作了一个树视图,我想在第一列和第二列中添加值,然后程序需要计算当您按 ENTER 按钮时将放入第三列的值(我使用了事件和绑定)。我不知道如何将值放入 Treeview 的特定列中,我总是收到此错误:

TypeError: 'float' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

我知道如何一次在每一列中插入值,但我不知道如何在不更改其他列中的值的情况下仅将一个值插入到特定列中。这是我写的函数:

def PlannedCosPerSize(event):

    try:
        for child in tree.get_children():
            Size=round(float(tree.item(child,"values")[1]),2)
            PlannedCost=round(float(tree.item(child,"values")[2]),2)
            PlanCostPerSize=float(round(PlannedCost/Size,2))

            tree.insert("","end", values=(PlanCostPerSize)[4])

            print(PlanCostPerSize)


    except IndexError:
        Error=messagebox.showinfo("error","You have error")
        pass

tree.bind('<Return>', PlannedCosPerSize)  # validate with Enter
Run Code Online (Sandbox Code Playgroud)

python treeview tkinter

0
推荐指数
1
解决办法
7416
查看次数

如何在 tkinter 中扩展画布内的框架?

我创建了一个画布,然后创建了一个框架作为画布的子项。我发现,我不应该使用pack()将框架放在画布中。我用了

my_canvas.create_window(0,0,window=my_frame, anchor='nw')
Run Code Online (Sandbox Code Playgroud)

但我希望我的框架可以通过我的应用程序调整大小。因此,我想,我需要fill=BOTH, expand=YES为我的框架添加类似的东西。

python tkinter python-3.x

0
推荐指数
1
解决办法
1993
查看次数

如何在 tkinter 中使用 pack 时将对象放入特定的行或列中

我一直在使用 python tkinter 制作一些 gui 应用程序。在 tkinter 中,pack 和 grid 不能一起使用。在编写代码时,我必须使用 pack,然后我需要使用 2 个名为“Cloumn”和“row”的网格功能,但是是不可能的。

from tkinter import *
root = Tk()
button = Button(root, text="Click Me")
button.pack(side="bottom") #But I want to put that button in row=3
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我需要将该按钮放在第 3 行。但是我该怎么做呢?有什么办法可以做到吗?

user-interface tkinter python-3.x

0
推荐指数
1
解决办法
2539
查看次数

如何销毁所有打开的 tkinter 顶级窗口

我这里有几行代码,tkinter toplevel window可以通过单击 来将其打开并销毁destroy all button。当我打开几个窗口并且我想销毁所有窗口时所面临的挑战只有一个被销毁。已尝试过该quit功能,但它关闭了所有窗口,包括root window. 我只想销毁所有顶层窗口。

import tkinter as tk




def open_window():
    global top1
    top1 = tk.Toplevel()

    top1.geometry("100x100")


def destroy_all():
    top1.destroy()



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


b1 = tk.Button(root, text="open", command=open_window)
b1.pack(side=tk.TOP)


b2 = tk.Button(root, text="destroy all", command=destroy_all)
b2.pack(side=tk.BOTTOM)


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

python tkinter toplevel

0
推荐指数
1
解决办法
4067
查看次数

类型错误:* 之后的 &lt;lambda&gt;() 参数必须是可迭代的,而不是队列

我正在前端工作,需要在单击按钮时将手形光标更改为忙碌光标。但我的代码抛出“类型错误”。我只想让代码显示一个按钮,单击该按钮会从手形光标更改为繁忙光标,然后返回正常光标。

这是我迄今为止尝试过的代码:

import threading
from threading import Thread
from threading import Event
import queue

sem=threading.Semaphore()

def setup_for_long_running_task(self):
    print("start")
    self.f1.config(cursor="wait")  # Set the cursor to busy
    sem.acquire()

    return_que = queue.Queue(1)
    workThread = Thread(target=lambda q, w_self: \
                        q.put(self.long_running_task()),
                        args=return_que)
    workThread.start()

    self.f1.after(5000,use_results_of_long_running_task(self,workThread,return_que))  # 500ms is half a second
    sem.release()
    print("stop")

def long_running_task(self):

    Event().wait(3.0)  # Simulate long running task

def use_results_of_long_running_task(self, workThread,return_que):
    ThreadRunning = 1
    while ThreadRunning:
        Event().wait(0.1)  # this is set to .1 seconds. Adjust for your process
        ThreadRunning = workThread.is_alive()

    while not …
Run Code Online (Sandbox Code Playgroud)

python multithreading tkinter

0
推荐指数
1
解决办法
7393
查看次数

有没有办法检测树视图的列标题的按下?

我希望根据用户单击的列标题对树视图的内容进行排序。

我已经尝试使用树视图虚拟事件,但按下标题并没有触发事件,即使它有单击和悬停动画。

python tkinter ttk

0
推荐指数
1
解决办法
1105
查看次数

无法将vlc导入python程序

我正在尝试通过 VLC 在 python Tkinter 中重现带声音的视频,但无法运行该文件,因为在运行 import vlc 行时出现错误。

\n\n

我有 32 位的 python 3、32 位的 VLC 播放器并通过安装pip install python-VLC,这是成功的,然后尝试运行代码并收到此错误:

\n\n
File "C:/Users/momoh/Documents/GitHub/CNDH/CNDH.py", line 5, in <module>\n    import vlc\n  File "C:\\Users\\momoh\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\vlc.py", line 207, in <module>\n    dll, plugin_path  = find_lib()\n  File "C:\\Users\\momoh\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages\\vlc.py", line 163, in find_lib\n    dll = ctypes.CDLL(libname)\n  File "C:\\Users\\momoh\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\ctypes\\__init__.py", line 348, in __init__\n    self._handle = _dlopen(self._name, mode)\nOSError: [WinError 126] The specified module could not be found \n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我\xc2\xb4m 尝试运行的代码:\n我的导入:

\n\n
import sys\nimport tkinter as tk           \nfrom …
Run Code Online (Sandbox Code Playgroud)

python windows tkinter vlc

0
推荐指数
1
解决办法
7464
查看次数

Python Tkinter 如何更新 for 循环中的文本小部件?

我正在尝试更新 for 循环内的滚动文本小部件中的文本。print 语句每次通过循环都会显示更新的文本,但在循环完成之前我在 Tk 窗口中看不到任何内容。然后我看到'('这是循环中的', 4, '次。')'。我从未见过显示 0 到 3。

from   tkinter import *
from   tkinter import scrolledtext
import time

main = Tk()
main.title("test_loop")
main.geometry('750x625')
main.configure(background='ivory3')


def show_msg():
    global texw
    textw = scrolledtext.ScrolledText(main,width=40,height=25)
    textw.grid(column=0, row=1,sticky=N+S+E+W)
    textw.config(background="light grey", foreground="black",
             font='arial 20 bold', wrap='word', relief="sunken", bd=5)
    for i in range(5):
        txt = "This is ", i, " times though the loop."
        txt = str(txt)
        print(txt)
        textw.delete('1.0', END)  # Delete any old text on the screen
        textw.update()            # Clear the screen.
        textw.insert(END, …
Run Code Online (Sandbox Code Playgroud)

tkinter python-3.x

0
推荐指数
1
解决办法
5216
查看次数

如何从 NavigationToolbar2Tk/FigureCanvasTkAgg 中删除工具栏按钮

我将 matplotlib 与 tk/tkinter 一起使用,遵循“ Embedding in Tk

self._figure = Figure()
self._axes: matplotlib.axes.Axes = self._figure.add_subplot(111)
self._canvas = FigureCanvasTkAgg(self._figure, master=frame)

toolbar = NavigationToolbar2Tk(self._canvas, frame)
toolbar.update()
Run Code Online (Sandbox Code Playgroud)

根据工具管理器

self._figure.canvas.manager.toolmanager.remove_tool("pan")
Run Code Online (Sandbox Code Playgroud)

应该有效,但事实并非如此。

# self._figure.canvas does not have attribute 'manager'
Run Code Online (Sandbox Code Playgroud)

从 vs-code 的屏幕截图中可以看出,FigureCanvasTkAgg 没有属性“manager”:

在此输入图像描述

如何去掉工具栏按钮?

python tkinter matplotlib python-3.x

0
推荐指数
1
解决办法
4450
查看次数