如何使用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)
但我的面板没有显示任何图像。我希望面板等待我,然后我单击按钮以显示下一个图像。怎么解决呢。
我制作了一个树视图,我想在第一列和第二列中添加值,然后程序需要计算当您按 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) 我创建了一个画布,然后创建了一个框架作为画布的子项。我发现,我不应该使用pack()将框架放在画布中。我用了
my_canvas.create_window(0,0,window=my_frame, anchor='nw')
Run Code Online (Sandbox Code Playgroud)
但我希望我的框架可以通过我的应用程序调整大小。因此,我想,我需要fill=BOTH, expand=YES为我的框架添加类似的东西。
我一直在使用 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 行。但是我该怎么做呢?有什么办法可以做到吗?
我这里有几行代码,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) 我正在前端工作,需要在单击按钮时将手形光标更改为忙碌光标。但我的代码抛出“类型错误”。我只想让代码显示一个按钮,单击该按钮会从手形光标更改为繁忙光标,然后返回正常光标。
这是我迄今为止尝试过的代码:
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) 我希望根据用户单击的列标题对树视图的内容进行排序。
我已经尝试使用树视图虚拟事件,但按下标题并没有触发事件,即使它有单击和悬停动画。
我正在尝试通过 VLC 在 python Tkinter 中重现带声音的视频,但无法运行该文件,因为在运行 import vlc 行时出现错误。
\n\n我有 32 位的 python 3、32 位的 VLC 播放器并通过安装pip install python-VLC,这是成功的,然后尝试运行代码并收到此错误:
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 \nRun Code Online (Sandbox Code Playgroud)\n\n这是我\xc2\xb4m 尝试运行的代码:\n我的导入:
\n\nimport sys\nimport tkinter as tk \nfrom …Run Code Online (Sandbox Code Playgroud) 我正在尝试更新 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) 我将 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”:
如何去掉工具栏按钮?
tkinter ×10
python ×8
python-3.x ×4
matplotlib ×1
toplevel ×1
treeview ×1
ttk ×1
vlc ×1
windows ×1