为什么同一个程序在Windows和Linux下运行时看起来不同?

2024-06-28 18:50:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个简单的Python应用程序来测量某个事件的时间。一切正常,但是在两个不同的操作系统上看起来完全不同,这让我有点头疼。我能做点什么吗?为什么会这样?我是说,最后,代码是一样的。在

# str8.py
#   Program to measure time from a certain event

from tkinter import *
from datetime import datetime

class FormatLabel(Label):

    # A new type of Label widget that allows both text and textvariable

    def __init__(self, master = None, **kwargs):

        self.textvariable = kwargs.pop('textvariable', StringVar(master))
        self.text = kwargs.pop('text', '{}')
        self.textvariable.trace('w', self.update_text)

        Label.__init__(self, master, **kwargs)

    def update_text(self, *args):

        self.config(text = self.text.format(self.textvariable.get()))

class App(Frame):

    def __init__(self, master = None, **kwargs):

        Frame.__init__(self, master, **kwargs)

        lbl = Label(self, text = 'You have been STR8 for:\n', font = 'Verdana 8 bold')
        lbl.grid(row=0, sticky=W)

        self.counters = dict()
        measurements = [ 'Years', 'Weeks', 'Days', 'Hours', 'Minutes', 'Seconds' ]

        for i, measurement in enumerate(measurements):

            self.counters[measurement] = DoubleVar()

            lbl = FormatLabel(self,
                              text = measurement + ": {:.2f}", # set the rounding here
                              textvariable = self.counters[measurement],
                              font = 'Verdana 8')
            lbl.grid(row = i + 1, column = 0, sticky = W)

            self.counters[measurement].set(0)

        btn = Button(self,
                     text = 'EXIT',
                     font = 'Verdana 8',
                     height = 1,
                     width = 19,
                     command = quit)
        btn.grid(row = 7, column = 0)

        self.increment()

    def increment(self):

        event = datetime(2017, 4, 4, 0, 0, 0)
        today = datetime.now()

        str8 = (today - event).total_seconds()

        self.counters['Minutes'].set(str8 / 60.)
        self.counters['Hours'].set(str8 / 3600.)
        self.counters['Seconds'].set(str8)
        self.counters['Days'].set(str8 / (3600. * 24))
        self.counters['Weeks'].set(str8 / (3600. * 24 * 7))
        self.counters['Years'].set(str8 / (3600. * 24 * 7 * 52))

        self.after(1000, self.increment)

def main():

    root = Tk()
    app = App(root)
    app.pack()
    root.title("STR8")
    root.resizable(width = False, height = False)
    app.mainloop()

if __name__ == '__main__':
    main()

图像:


Tags: textselfmasterdatetimeinitdefrootlabel
1条回答
网友
1楼 · 发布于 2024-06-28 18:50:01

tkinter并不是设计成在每个平台上都一样。相反,它被专门设计成在每个平台上看起来不同。它的设计目的是使工作相同,但不一定看起来相同。只要有可能,它就会使用底层操作系统的widget工具箱来绘制widget(例如:在OSX上可以看到OSX的按钮,在windows上可以看到windows的按钮,等等)

tkinter的主要目标是让相同的代码在所有平台上运行,工作方式相同,但要尽可能遵守平台准则。在

相关问题 更多 >