[英]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.