Python 在画布tkinter中创建数字时间

Python 在画布tkinter中创建数字时间,python,tkinter,canvas,tkinter-canvas,Python,Tkinter,Canvas,Tkinter Canvas,我是使用tkinter的Python新手,我有一个无法解决的问题。 我想把数字时间放在我的应用程序的右上角(请看图片)。我试图在网上搜索如何创建数字时间,但它是在全局根和帧配置上,我找不到为画布制作的数字时钟。我还想使用网格将我的按钮放在中间,但我没有找到解决方案。谁能帮帮我吗?我会把代码贴在这里 from tkinter import * from tkinter import ttk from datetime import date import time import sys cla

我是使用tkinter的Python新手,我有一个无法解决的问题。 我想把数字时间放在我的应用程序的右上角(请看图片)。我试图在网上搜索如何创建数字时间,但它是在全局根和帧配置上,我找不到为画布制作的数字时钟。我还想使用网格将我的按钮放在中间,但我没有找到解决方案。谁能帮帮我吗?我会把代码贴在这里

from tkinter import *
from tkinter import ttk
from datetime import date
import time
import sys


class main_menu(object):
    def __init__(self, root):
        self.root = root
        self.root.title('System')
        self.root.geometry('780x488')

        self.background = PhotoImage(file='images/bg.png')
        self.canvas = Canvas (root)
        self.canvas.grid(sticky=N+S+W+E)
        self.canvas.create_image(0,0, image=self.background, anchor="nw")

        self.scan_photo = PhotoImage (file='images/scan.png')
        self.logs_photo = PhotoImage (file='images/logs.png')
        self.settings_photo = PhotoImage (file='images/settings.png')

        self.scan_btn = Button (self.canvas, image=self.scan_photo, borderwidth=0, command=self.StartScan)
        self.scan_win = self.canvas.create_window(225, 100, anchor="nw", window=self.scan_btn)
        self.logs_btn = Button (self.canvas, image=self.logs_photo, borderwidth=0, command=self.Logs)
        self.logs_win = self.canvas.create_window(225, 200, anchor="nw", window=self.logs_btn)
        self.settings_btn = Button (self.canvas, image=self.settings_photo, borderwidth=0, command=self.Settings)
        self.settings_win = self.canvas.create_window(225, 300, anchor="nw", window=self.settings_btn)

        self.today = date.today()
        self.format = self.today.strftime("%b. %d, %Y")
        self.canvas.create_text(730, 30, text=self.format, font=("Helvetica", 10))

        self.InstructionsLabel = Label(root, text="""
            

            tadahhhhhh""", fg="black", font=("Calibri", 14))

        self.Return_photo = PhotoImage (file='images/back_24x24.png')
        self.ReturnMenu_btn = Button (self.canvas, image=self.Return_photo, background='white',activebackground='white', borderwidth=0, command=self.MainMenu)
        self.ReturnMenu_win = self.canvas.create_window(0, 0, anchor="nw", window=self.ReturnMenu_btn)
        ###self.ReturnMenu = Button(root, image=self.back_photo, command=self.MainMenu, )
        self.MainMenu()

    def MainMenu(self):
        self.RemoveAll()
        self.ReturnMenu_btn.grid_remove()
        self.scan_btn.grid(padx=215)
        self.logs_btn.grid(padx=215)
        self.settings_btn.grid(padx=215)

    def StartScan(self):
        self.RemoveAll()

    def Logs(self):
        self.RemoveAll()
        self.ReturnMenu.grid()

    def Settings(self):
        self.RemoveAll()
        self.ReturnMenu.grid()

    def RemoveAll(self):
        self.scan_btn.grid_remove()
        self.logs_btn.grid_remove()
        self.settings_btn.grid_remove()
        self.InstructionsLabel.grid_remove()
        self.ReturnMenu_btn.grid_remove()


if __name__ == '__main__':

    root = Tk()
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    main_menu = main_menu(root)
    root.mainloop()

要将时间放置在右上角,您需要知道画布的宽度。因此,请使用
canvas.winfo_width()
获取画布的宽度,并减去一些数字以将其放置在所需位置

如果您想让时间保持在右上角,即使窗口已调整大小,也可以将Configure绑定到函数,并使用
.coords
.moveto
移动文本

示例代码(此代码将确保时间始终位于右上角)

从tkinter导入字体
类主菜单:
定义初始化(自,根):
...
self.time=self.canvas.create_text(0,0,text=self.format,font=(“Helvetica”,10))
self.canvas.bind(“”,self.adjustTimePosition)
...
def调整时间位置(自身、事件):
family,size=self.canvas.itemcget(self.time,'font').split()#获取字体系列和字体大小
text=self.canvas.itemcget(self.time,“text”)
txt_font=font.font(族=族,大小=大小)
宽度,高度=txt_font.measure(文本),txt_font.metrics(“上升”)#测量文本的宽度和高度
self.canvas.coords(self.time,self.canvas.winfo_width()-width,height)#移动文本

建议:导入时不要使用
*
,因为这样做不是最好的做法,而是导入
导入模块名称
或导入您需要的内容。也可以用
ClassName()
代替
ClassName()
这样做,你想要“数字时间”(word)或者只是在右上角显示时间?您好,我想在右上角显示时间。@Xian在回复某人时,请使用@标记。