簡體   English   中英

動態滾動條tkinter

[英]Dynamic scroll bar tkinter

我對 tkinter 還是很陌生,所以我決定嘗試制作一個簡單的 discord 應用程序,發送新消息時我遇到了麻煩。 因此,當消息開始離開頁面時,直到您發送另一條消息才能看到最近的消息,我不知道它為什么會這樣。 有沒有人有任何想法? 代碼:

    from tkinter import *
import tkinter.simpledialog
from tkinter import ttk
import tkinter as tk
import os





root = Tk()
root.title("discord rip off")
root.geometry("720x480+0+0")
def add_Server():
    return tk.simpledialog.askinteger("Add Server", "Server Code")


# main message area
frame = Frame(root, width=600, height=300, bd=5, relief=RIDGE, bg="red") # the bd and the relief makes a nice effect outlineing the frame 
frame.grid(row=0, column=1)


messageEnter = Entry(frame)
messageEnter.pack(side=BOTTOM, fill=BOTH)
# canvas
myCanvas = Canvas(frame)
myCanvas.pack(fill=BOTH, side=LEFT)

# message scrollbar
messageScrollbar = ttk.Scrollbar(frame, orient=VERTICAL, command=myCanvas.yview)
messageScrollbar.pack(side=RIGHT, fill=Y)




# canvas
myCanvas.configure(yscrollcommand=messageScrollbar.set)
myCanvas.bind("<Configure>", lambda e: myCanvas.configure(scrollregion=(myCanvas.bbox("all"))))



# creating a second frame that is the message frame
messageFrame = Frame(myCanvas)

# canvas
myCanvas.create_window((0,0), window=messageFrame, anchor="nw")

def send_Message(event):
    if messageEnter.get() == "":
        print(myCanvas.bbox("all"))
        pass
    else:
        Label(messageFrame, text=messageEnter.get(), anchor="w").pack(fill=X, expand=1)
        myCanvas.configure(scrollregion=(myCanvas.bbox("all")))
        messageEnter.delete(0, "end")
        myCanvas.yview_moveto("1.0") # moves the scroll bar to the bottom when called


# send message
messageEnter.bind("<Return>", send_Message)


# server list
# photo = PhotoImage(file=os.path.dirname(__file__)+"/images/add.png")
# photo = photo.subsample(1, 1) # resizies image

serverListFrame = Frame(root, width=38, height=200, bg="blue")
serverListFrame.grid(row=0, column=0, sticky=N)


addServer = Button(root) # , image=photo

addServer.grid(row=0, column=0, sticky=N)

root.update()
root.mainloop()

謝謝。

“您必須重置 Canvas 的滾動區域以使新添加的 Label 可見 - 您正在這樣做,但有點太早了:Label 沒有任何大小或 Z4757FE07FD492A8BE0EA6A760DD6 迭代實際上需要分配給它的主循環),所以它沒有被考慮在內。在創建 Label 和設置滾動區域之間放置 root.update_idletasks(),應該修復它。 @jasonharper

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM