Skip to content

Commit f31f648

Browse files
committed
bug fixes from 1.3
1 parent e9e7369 commit f31f648

9 files changed

Lines changed: 80 additions & 96 deletions

File tree

Application/freeze.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
shutil.rmtree('tkintertableapp', ignore_errors=True)
1616
path=os.path.abspath('../')
1717

18-
version = '1.0.0'
18+
version = '1.3.1'
1919

2020
f = Freezer('tkintertableapp', excludes=('wx'))
2121
f.addScript(os.path.join(path, "TablesApp.py"))
@@ -29,7 +29,7 @@
2929
datadir = 'tkintertableapp/mpl-data'
3030
shutil.copytree(mpldir, datadir)
3131

32-
#add resource files
32+
#add resource files
3333
shutil.copy('logo.ico', 'tkintertableapp')
3434
shutil.copy('../sample.table', 'tkintertableapp')
3535

@@ -38,7 +38,6 @@
3838
f = zipfile.ZipFile("tkintertableapp-"+version+".zip", "w")
3939
for dirpath, dirnames, filenames in os.walk('tkintertableapp'):
4040
for fname in filenames:
41-
fullname = os.path.join(dirpath, fname)
41+
fullname = os.path.join(dirpath, fname)
4242
f.write(fullname)
4343
f.close()
44-

description.txt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@ Description
22
-----------
33

44
This package allows interactive spreadsheet-style tables to be added into a Tkinter application.
5-
Tkinter is the standard GUI toolkit for python. A sample application using these classes
6-
is included in the distribution.
5+
Tkinter is the standard GUI toolkit for Python. A sample application using these classes
6+
is included in the distribution. Now works with Python 3.
77

88
Installation
99
------------
1010

11-
pip install tkintertable or easy_install tkintertable
11+
pip install tkintertable
1212

1313
You can clone the current source using
1414

1515
git clone https://github.com/dmnfarrell/tkintertable.git
1616

1717
https://github.com/dmnfarrell/tkintertable/wiki for more info.
18-
19-
20-
21-

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
setup(
99
name = 'tkintertable',
10-
version = '1.3',
10+
version = '1.3.1',
1111
description = 'Extendable table class for Tkinter',
1212
long_description = long_description,
1313
url='https://github.com/dmnfarrell/tkintertable',

tkintertable/Filtering.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
except:
2828
from Tkinter import *
2929
from ttk import *
30-
import Pmw
30+
#import Pmw
3131
from types import *
3232
import re
3333

@@ -177,35 +177,36 @@ def __init__(self, parent, index, fields):
177177
self.index = index
178178
self.filtercol=StringVar()
179179
initial = fields[0]
180-
filtercolmenu = Pmw.OptionMenu(self,
181-
labelpos = 'w',
182-
label_text = 'Column:',
183-
menubutton_textvariable = self.filtercol,
184-
items = fields,
185-
initialitem = initial,
186-
menubutton_width = 10)
180+
filtercolmenu = Combobox(self,
181+
#labelpos = 'w',
182+
#label_text = 'Column:',
183+
textvariable = self.filtercol,
184+
values = fields,
185+
#initialitem = initial,
186+
width = 10)
187187
filtercolmenu.grid(row=0,column=1,sticky='news',padx=2,pady=2)
188188
self.operator=StringVar()
189-
operatormenu = Pmw.OptionMenu(self,
190-
menubutton_textvariable = self.operator,
191-
items = self.operators,
192-
initialitem = 'contains',
193-
menubutton_width = 8)
189+
operatormenu = Combobox(self,
190+
textvariable = self.operator,
191+
values = self.operators,
192+
#initialitem = 'contains',
193+
width = 8)
194194
operatormenu.grid(row=0,column=2,sticky='news',padx=2,pady=2)
195195
self.filtercolvalue=StringVar()
196196
valsbox=Entry(self,textvariable=self.filtercolvalue,width=20)
197197
valsbox.grid(row=0,column=3,sticky='news',padx=2,pady=2)
198198
valsbox.bind("<Return>", self.parent.callback)
199199
self.booleanop=StringVar()
200-
booleanopmenu = Pmw.OptionMenu(self,
201-
menubutton_textvariable = self.booleanop,
202-
items = self.booleanops,
203-
initialitem = 'AND',
204-
menubutton_width = 6)
200+
self.booleanop.set('AND')
201+
booleanopmenu = Combobox(self,
202+
textvariable = self.booleanop,
203+
values = self.booleanops,
204+
#initialitem = 'AND',
205+
width = 6)
205206
booleanopmenu.grid(row=0,column=0,sticky='news',padx=2,pady=2)
206207
#disable the boolean operator if it's the first filter
207-
if self.index == 0:
208-
booleanopmenu.component('menubutton').configure(state=DISABLED)
208+
#if self.index == 0:
209+
# booleanopmenu.component('menubutton').configure(state=DISABLED)
209210
cbutton=Button(self,text='-', command=self.close)
210211
cbutton.grid(row=0,column=5,sticky='news',padx=2,pady=2)
211212
return

tkintertable/Prefs.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ def get(self,key):
7474

7575
if key in self.prefs:
7676
return self.prefs[key]
77-
else:
78-
pass
79-
return
77+
return
8078

8179

8280
def delete(self,key):

tkintertable/TableModels.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ def getDefaultTypes(self):
159159

160160
def getData(self):
161161
"""Return the current data for saving"""
162+
162163
data = copy.deepcopy(self.data)
163164
data['colors'] = self.colors
164165
data['columnnames'] = self.columnNames
@@ -177,6 +178,7 @@ def getData(self):
177178
def getAllCells(self):
178179
"""Return a dict of the form rowname: list of cell contents
179180
Useful for a simple table export for example"""
181+
180182
records={}
181183
for row in range(len(self.reclist)):
182184
recdata=[]
@@ -187,6 +189,7 @@ def getAllCells(self):
187189

188190
def getColCells(self, colIndex):
189191
"""Get the viewable contents of a col into a list"""
192+
190193
collist = []
191194
if self.getColumnType(colIndex) == 'Link':
192195
return ['xxxxxx']

tkintertable/Tables.py

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,7 @@ def clear():
11911191

11921192
def convertFormulae(self, rows, cols=None):
11931193
"""Convert the formulas in the cells to their result values"""
1194+
11941195
if len(self.multiplerowlist) == 0 or len(self.multiplecollist) == 0:
11951196
return None
11961197

@@ -1206,18 +1207,21 @@ def convertFormulae(self, rows, cols=None):
12061207

12071208
def paste(self, event=None):
12081209
"""Copy from clipboard"""
1210+
12091211
print (self.parentframe.clipboard_get())
12101212
return
12111213

12121214
def copyCell(self, rows, cols=None):
12131215
"""Copy cell contents to a temp internal clipboard"""
1216+
12141217
row = rows[0]; col = cols[0]
12151218
#absrow = self.get_AbsoluteRow(row)
12161219
self.clipboard = copy.deepcopy(self.model.getCellRecord(row, col))
12171220
return
12181221

12191222
def pasteCell(self, rows, cols=None):
12201223
"""Paste cell from internal clipboard"""
1224+
12211225
row = rows[0]; col = cols[0]
12221226
#absrow = self.get_AbsoluteRow(row)
12231227
val = self.clipboard
@@ -1227,6 +1231,7 @@ def pasteCell(self, rows, cols=None):
12271231

12281232
def copyColumns(self):
12291233
"""Copy current selected cols"""
1234+
12301235
M = self.model
12311236
coldata = {}
12321237
for col in self.multiplecollist:
@@ -1236,6 +1241,7 @@ def copyColumns(self):
12361241

12371242
def pasteColumns(self, coldata):
12381243
"""Paste new cols, overwrites existing names"""
1244+
12391245
M = self.model
12401246
for name in coldata:
12411247
if name not in M.columnNames:
@@ -1920,23 +1926,20 @@ def close_prefsdialog():
19201926

19211927
#fonts
19221928
fts = self.getFonts()
1923-
1924-
def setFont():
1925-
self.thefont = self.fontbox.getcurselection()
1929+
self.fontvar = StringVar()
1930+
self.fontvar.set(self.prefs.get('celltextfont'))
1931+
def setFont(*args):
1932+
self.thefont = self.fontvar.get()
19261933
return
19271934

1928-
import Pmw
1929-
self.fontbox = Pmw.ScrolledListBox(frame2,
1930-
items=(fts),
1931-
labelpos='w',
1932-
label_text='Font:',
1933-
listbox_height = 6,
1934-
selectioncommand = setFont,
1935-
usehullsize = 1,
1936-
hull_width = 200,
1937-
hull_height = 80)
1938-
self.fontbox.setvalue(self.prefs.get('celltextfont'))
1939-
self.fontbox.grid(row=row,column=0, columnspan=2, sticky='nes', padx=3,pady=2)
1935+
self.fontbox = Combobox(frame2,
1936+
values=(fts),
1937+
text='Font:',
1938+
height = 6,
1939+
textvariable=self.fontvar)
1940+
self.fontvar.trace('w', setFont)
1941+
Label(frame2,text='Font:').grid(row=row,column=0,padx=3,pady=2)
1942+
self.fontbox.grid(row=row,column=1, columnspan=2, sticky='nes', padx=3,pady=2)
19401943
row=row+1
19411944

19421945
lblfontsize=Label(frame2,text='Text Size:')
@@ -2020,11 +2023,11 @@ def loadPrefs(self, prefs=None):
20202023
'rowselectedcolor': self.rowselectedcolor,
20212024
'rowheaderwidth': self.rowheaderwidth}
20222025

2023-
for prop in defaultprefs.keys():
2024-
try:
2025-
print(self.prefs.get(prop))
2026-
except:
2027-
self.prefs.set(prop, defaultprefs[prop])
2026+
for prop in defaultprefs:
2027+
if not prop in self.prefs.prefs:
2028+
#print (defaultprefs[prop])
2029+
if defaultprefs[prop] != 'None':
2030+
self.prefs.set(prop, defaultprefs[prop])
20282031

20292032
self.defaultprefs = defaultprefs
20302033

@@ -2077,7 +2080,7 @@ def savePrefs(self):
20772080
self.prefs.set('linewidth', self.linewidthvar.get())
20782081
self.linewidth = self.linewidthvar.get()
20792082
self.prefs.set('celltextsize', self.celltextsizevar.get())
2080-
self.prefs.set('celltextfont', self.fontbox.getcurselection())
2083+
self.prefs.set('celltextfont', self.fontvar.get())
20812084
self.prefs.set('cellbackgr', self.cellbackgr)
20822085
self.prefs.set('grid_color', self.grid_color)
20832086
self.prefs.set('rowselectedcolor', self.rowselectedcolor)
@@ -2548,6 +2551,7 @@ class RowHeader(Canvas):
25482551
takes it's size and rendering from the parent table
25492552
This also handles row/record selection as opposed to cell
25502553
selection"""
2554+
25512555
def __init__(self, parent=None, table=None, width=40):
25522556
Canvas.__init__(self, parent, bg='gray75', width=width, height=None)
25532557

@@ -2628,6 +2632,7 @@ def handle_left_release(self,event):
26282632

26292633
def handle_left_ctrl_click(self, event):
26302634
"""Handle ctrl clicks - for multiple row selections"""
2635+
26312636
rowclicked = self.table.get_row_clicked(event)
26322637
multirowlist = self.table.multiplerowlist
26332638
if 0 <= rowclicked < self.table.rows:
@@ -2652,6 +2657,7 @@ def handle_right_click(self,event):
26522657

26532658
def handle_mouse_drag(self, event):
26542659
"""Handle mouse moved with button held down, multiple selections"""
2660+
26552661
if hasattr(self, 'cellentry'):
26562662
self.cellentry.destroy()
26572663
rowover = self.table.get_row_clicked(event)
@@ -2680,6 +2686,7 @@ def handle_mouse_drag(self, event):
26802686

26812687
def drawSelectedRows(self, rows=None):
26822688
"""Draw selected rows, accepts a list or integer"""
2689+
26832690
self.delete('rect')
26842691
if type(rows) is not list:
26852692
rowlist=[]
@@ -2694,6 +2701,7 @@ def drawSelectedRows(self, rows=None):
26942701

26952702
def drawRect(self, row=None, tag=None, color=None, outline=None, delete=1):
26962703
"""Draw a rect representing row selection"""
2704+
26972705
if tag==None:
26982706
tag='rect'
26992707
if color==None:
@@ -2716,6 +2724,7 @@ def drawRect(self, row=None, tag=None, color=None, outline=None, delete=1):
27162724
class AutoScrollbar(Scrollbar):
27172725
"""a scrollbar that hides itself if it's not needed. only
27182726
works if you use the grid geometry manager."""
2727+
27192728
def set(self, lo, hi):
27202729
if float(lo) <= 0.0 and float(hi) >= 1.0:
27212730
# grid_remove is currently missing from Tkinter!

0 commit comments

Comments
 (0)