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

时间:2019-05-25 16:39:08

标签: python user-interface tkinter serial-port

我刚刚学习了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()

1 个答案:

答案 0 :(得分:0)

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

            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)

标签当前包装在框架的左侧,但包含标签的框架未包装在窗口的左侧。可以像其他Tkinter UI小部件一样打包框架。由于您是从Application类中的Frame继承的,因此可以在调用Application构造函数之后使用它(如果希望框架和标签保留在窗口的左侧):

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

此外,最好查看您将要使用的小部件的文档,例如帧 http://effbot.org/tkinterbook/frame.htm