wxPython, tree Control text cutoff

Kiran Kiran.Karra at gmail.com
Wed Jun 14 15:08:32 EDT 2006


 Hello all,
I am using a tree to display stuff, and it is constantly updated, but
what I have noticed is in the lowest level, there is clearly noticable
cutoff of the text I place there. The cutoff is existent even if I do
not update the text inside the tree constantly. It seems that the text
is halfway below where it should line up. I tried placing an image to
see if that would correct it, but it does not. The image is perfectly
lined up, but the text is still misaligned.

Any known issues of this and how to fix it? By the way, it happens in
both Linux and Windows.

thanks a lot for your help!



here is the code that I am using, I realize that it is a bit
convoluted, but the parts where I am setting the text should be
evident.

import wx
import wx.gizmos as gizmos

class AlarmsWindow(wx.MDIChildFrame):
	def __init__(self, parent, title, size, pos):
		wx.MDIChildFrame.__init__(self, parent, -1, title, size = size, pos =
pos)

		self.tree = gizmos.TreeListCtrl(self, -1, style = wx.TR_DEFAULT_STYLE
| wx.TR_FULL_ROW_HIGHLIGHT)

        # images of the tree
		isz = (16,16)
		il = wx.ImageList(isz[0], isz[1])
		self.fldridx     = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER,
 wx.ART_OTHER, isz))
		self.fldropenidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN,
 wx.ART_OTHER, isz))
		self.fileidx     =
il.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
		self.selidx      = il.Add(wx.ArtProvider_GetBitmap(wx.ART_CROSS_MARK,
  wx.ART_OTHER, isz))

		self.tree.SetImageList(il)
		self.il = il

        # create some columns
		self.tree.AddColumn("Connection")
		self.tree.AddColumn("Alarm")
		self.tree.AddColumn("Value")
		self.tree.SetMainColumn(0)

		self.root = self.tree.AddRoot("Connections")
		self.tree.SetItemImage(self.root, self.fldridx, which =
wx.TreeItemIcon_Normal)
		self.tree.SetItemImage(self.root, self.fldropenidx, which =
wx.TreeItemIcon_Expanded)

		self.connectionsName = []
		self.connections     = []
		self.registers       = []

		self.tree.Expand(self.root)

		self.tree.GetMainWindow().Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
		self.Show()


		# testing

		self.AddConnection("Dummy")
		self.AddRegister("Dummy", "R5")
		self.AddAlarm("Dummy", "R5", "LOA", "10")
		self.UpdateAlarm("Dummy", "R5", "LOA", "14")
		self.AddAlarm("Dummy", "R5", "LOS", "1354")
		self.AddRegister("Dummy", "R6")
		self.AddAlarm("Dummy", "R6", "LOA", "15")
		self.AddConnection("DUMMY @#2")
		self.AddRegister("DUMMY @#2", "R0")
		self.AddAlarm("DUMMY @#2", "R0", "LSKJDF", "S:LKJDF")


    # tree control
	def OnRightUp(self, evt):
		pos = evt.GetPosition()
		item, flags, col = self.tree.HitTest(pos)
		if item:
			print('Flags: %s, Col:%s, Text: %s' %
                           (flags, col, self.tree.GetItemText(item,
col)))

    # tree control
	def OnSize(self, evt):
		self.tree.SetSize(self.GetSize())

    # adds a section to the logger
	def AddConnection(self, name):
		self.connectionsName.append(name)
		self.connections.append([])
		child = self.tree.AppendItem(self.root, name)
		self.connections[(len(self.connectionsName)-1)].append(child)
		self.tree.SetItemText(child, name)
		self.tree.SetItemImage(child, self.fldridx, which =
wx.TreeItemIcon_Normal)
		self.tree.SetItemImage(child, self.fldropenidx, which =
wx.TreeItemIcon_Expanded)

	# adds a register
	def AddRegister(self, connection, name):
		# find the connection
		index = -1
		for i in range(len(self.connectionsName)):
			if self.connectionsName[i] == connection:
				index = i
				break
		if index != -1:
			self.connections[index].append([self.tree.AppendItem(self.connections[index][0],
name)])

    # adds a message to a specific section
	def AddAlarm(self, connection, register, alarm, value):
        # find the connection
		for i in range(len(self.connectionsName)):
			if self.connectionsName[i] == connection:
				# find the register
				for j in range(1, len(self.connections[i])):
					if self.tree.GetItemText((self.connections[i][j])[0]) == register:

						x = self.tree.AppendItem(self.connections[i][j][0], "")
						self.connections[i][j].append([x, alarm])
						self.tree.SetItemImage(x, self.fileidx, wx.TreeItemIcon_Normal)
						self.tree.SetItemText(x, alarm, 1)
						self.tree.SetItemText(x, value, 2)


	# updates the alarm's window
	def UpdateAlarm(self, connection, register, alarm, value):
		# find the connection
		for i in range(len(self.connectionsName)):
			if self.connectionsName[i] == connection:
				# find the register
				for j in range(1, len(self.connections[i])):
					if self.tree.GetItemText(self.connections[i][j][0]) == register:
						# find the alarm
						for k in range(1, len(self.connections[i][j])):
							if self.connections[i][j][k][1] == alarm:
								self.tree.SetItemImage(self.connections[i][j][k][0],
self.fileidx, wx.TreeItemIcon_Normal)
								self.tree.SetItemText(self.connections[i][j][k][0], value, 2)
								return

class MDIFrame(wx.MDIParentFrame):
		def __init__(self):
			wx.MDIParentFrame.__init__(self, None, -1, "MDI Parent", size =
(600, 400))
			child = AlarmsWindow(self, "Alarm", (400, 300), (0, 0))


if __name__=='__main__':
	app = wx.PySimpleApp()
	frame = MDIFrame()
	frame.Show()
	app.MainLoop()




More information about the Python-list mailing list