tkinter小部件上的空间显示问题

2024-04-19 06:52:54 发布

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

我刚刚学习了tkinterr,我想用tkinter来显示小部件,我在布局上有问题,我想显示的文本居中,我能得到帮助把链接小部件上的文本放在左角,使用整洁的空格或教程建议来管理小部件上的布局吗 外观类似于this。你知道吗

import time
import serial
from Tkinter import *

serial_speed = 115200
serial_port = '/dev/ttyACM0'

ser = serial.Serial(serial_port, serial_speed, timeout=1)

class Application(Frame):

    def measure(self):

         ser.write("m")
        data = ser.readline()

        # If the answer is not empty, process & display data
        if (data != ""):
            processed_data = data.split(",")

            self.tegangan_data.set("TEGANGAN: " + str(processed_data[0]))
            self.tegangan.pack()

            self.arus_data.set("    ARUS    : " + str(processed_data[1]))
            self.arus.pack()

            self.daya_data.set("   DAYA : " + str(processed_data[2]))
            self.daya.pack()

            self.torsi_data.set("   TORSI   : " + str(processed_data[3]))
            self.torsi.pack()

            self.panas_data.set("   PANAS MESIN : " + str(processed_data[4]))
            self.panas.pack()

            self.jarak_data.set("   JARAK TEMPUH    : " + str(processed_data[5]))
            self.jarak.pack()

        # Wait 1 second between each measurement
        self.after(500,self.measure)

    # Create display elements
    def createWidgets(self):

        self.tegangan = Label(self, textvariable=self.tegangan_data, font=('Verdana', 20, 'bold'))
        self.tegangan_data.set("Tegangan")
        self.tegangan.pack()


        self.arus = Label(self, textvariable=self.arus_data, font=('Verdana', 20, 'bold'))
        self.arus_data.set("Arus")
        self.arus.pack()

        self.daya = Label(self, textvariable=self.daya_data, font=('Verdana', 20, 'bold'))
        self.daya_data.set("Daya")
        self.daya.pack()

        self.torsi = Label(self, textvariable=self.torsi_data, font=('Verdana', 20, 'bold'))
        self.torsi_data.set("Torsi")
        self.torsi.pack()

        self.panas = Label(self, textvariable=self.panas_data, font=('Verdana', 20, 'bold'))
        self.panas_data.set("Panas mesin")
        self.panas.pack()

        self.jarak = Label(self, textvariable=self.jarak_data, font=('Verdana', 20, 'bold'))
        self.jarak_data.set("Daya")
        self.jarak.pack()


     def __init__(self, master=None):
        Frame.__init__(self, master)
        self.tegangan_data = StringVar()
        self.arus_data = StringVar()
        self.daya_data = StringVar()
        self.torsi_data = StringVar()
        self.panas_data = StringVar()
        self.jarak_data = StringVar()

        self.createWidgets()
        self.pack()
        self.measure()
root = Tk()
app = Application(master=root)
app.mainloop()

Tags: selfdataseriallabelpacksetstrprocessed
1条回答
网友
1楼 · 发布于 2024-04-19 06:52:54

要使标签在窗口中左对齐,可以将“measure”方法中的代码更改为:

            self.tegangan_data.set("TEGANGAN: " + str(processed_data[0]))
            self.tegangan.pack(anchor='w')

            self.arus_data.set("ARUS: " + str(processed_data[1]))
            self.arus.pack(anchor='w')

            self.daya_data.set("DAYA: " + str(processed_data[2]))
            self.daya.pack(anchor='w')

            self.torsi_data.set("TORSI: " + str(processed_data[3]))
            self.torsi.pack(anchor='w')

            self.panas_data.set("PANAS MESIN: " + str(processed_data[4]))
            self.panas.pack(anchor='w')

            self.jarak_data.set("JARAK TEMPUH: " + str(processed_data[5]))
            self.jarak.pack(anchor='w')

这将导致:

UI of updated program

现在,如果你水平地展开窗口,你会看到即使标签保持左对齐,它们也不会停留在窗口的左侧,而是停留在中间。我不知道您是否想要这种行为,但是如果您想知道为什么会发生这种情况,请将初始化框架窗口的行更改为:

Frame.__init__(self, master, borderwidth=5, relief=RIDGE)

标签当前已打包到框架的左侧,但包含标签的框架未打包到窗口的左侧。框架可以像其他tkinterui小部件一样打包。由于继承了应用程序类中的Frame,因此可以在调用应用程序构造函数后使用它(如果希望框架和标签保持在窗口的左侧):

app.pack(anchor='w')

您还可以使用:

app.pack(side='left')

虽然他们的行为有差异,但我会让你去探索。你知道吗

最后,为了改善应用程序的外观,可以将框架配置为在它和窗口边缘之间总是有一些填充。试试这个:

app.config(padx=20)
app.config(pady=10)

有关使用pack()的良好信息来源: https://effbot.org/tkinterbook/pack.htm

如果您想在Tkinter中进行复杂的布局,那么应该检查grid(): https://effbot.org/tkinterbook/grid.htm

另外,最好查看您必须使用的小部件的文档,例如Frame http://effbot.org/tkinterbook/frame.htm

相关问题 更多 >