[英]problem with space display on tkinter widgets
我刚刚学习了tkinterr,我想使用tkinter来显示小部件,我在布局时遇到问题,我要显示的文本是居中的,我可以帮助将链接小部件上的文本放到左上角并使用整洁空格或教程建议对小部件的布局管理的外观像这样 。
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()
要使标签在窗口中左对齐,可以将“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')
这将导致:
现在,如果您水平展开窗口,您会看到即使标签保持左对齐,它们也不会粘在窗口的左侧,而是保持在中间。 我不知道你是否想要这种行为,但是如果你想知道为什么会这样,请将初始化Frame窗口的行更改为:
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
此外,最好查看您必须使用的小部件的文档,例如Frame http://effbot.org/tkinterbook/frame.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.