我想創建一個 tkinter 影片,其中所有內容的框架從右向左移動。單擊按鈕后,框架及其內容應從左向右移動。我能夠實作前者,但是當我單擊按鈕時,框架及其內容消失了。
import tkinter as tk
from tkinter import *
def contract(i):
if i<=425:
b.place(x=i)
b.after(5, lambda: contract(i))
i = i 1
def expand(i):
if i>=100:
b.place(x=i)
b.after(5, lambda: expand(i))
i = i-1
root = tk.Tk()
root.geometry('425x670')
b =Frame(root,bg='red',height=670,width=400)
b.pack()
b.grid_propagate(0)
button=Button(b,text="withdraw",command=lambda: contract(425))
button.grid(row=0,column=0)
expand(425)
root.mainloop()
---------------------------------
I'd like a solution that would fix this problem.
I'm just a beginner at tkinter and I would appreciate your help!
uj5u.com熱心網友回復:
我已經測驗過你的代碼,當視窗展開時,你可以看到點擊按鈕后,該部分被傳送回原來的位置。換句話說,該部分并沒有消失,而是立即到達目的地。這是因為你在 contract() 中使用 i 作為引數,因為 x=i,將 425 傳遞給 i 將立即使 x=425。我對此的解決方案是使用 2 個引數,一個原始位置和一個目標,原始位置將遞增,直到它擊中目標,并且 x 將設定為原始值。這是我編輯的代碼:
import tkinter as tk
from tkinter import *
def contract(original,target):
if original<=target:
b.place(x=original)
b.after(5, lambda: contract(original,target))
original = 1
def expand(original, target):
if original>=target:
b.place(x=original)
b.after(5, lambda: expand(original, target))
original -= 1
root = tk.Tk()
root.geometry('425x670')
b =Frame(root,bg='red',height=670,width=400)
b.pack()
b.grid_propagate(0)
button=Button(b,text="withdraw",command=lambda: contract(100,425))
button.grid(row=0,column=0)
expand(425,100)
root.mainloop()
希望這可以幫助你!
*編輯:我注意到在它收縮并且您再次單擊按鈕后,它會從 100 -> 425 重復影片,您可能希望實作一個邏輯來控制按鈕觸發的功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527598.html
