Skip to content

Commit

Permalink
bug fixes from 1.3
Browse files Browse the repository at this point in the history
  • Loading branch information
dmnfarrell committed Nov 13, 2018
1 parent e9e7369 commit f31f648
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 96 deletions.
7 changes: 3 additions & 4 deletions Application/freeze.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
shutil.rmtree('tkintertableapp', ignore_errors=True)
path=os.path.abspath('../')

version = '1.0.0'
version = '1.3.1'

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

#add resource files
#add resource files
shutil.copy('logo.ico', 'tkintertableapp')
shutil.copy('../sample.table', 'tkintertableapp')

Expand All @@ -38,7 +38,6 @@
f = zipfile.ZipFile("tkintertableapp-"+version+".zip", "w")
for dirpath, dirnames, filenames in os.walk('tkintertableapp'):
for fname in filenames:
fullname = os.path.join(dirpath, fname)
fullname = os.path.join(dirpath, fname)
f.write(fullname)
f.close()

10 changes: 3 additions & 7 deletions description.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,16 @@ Description
-----------

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

Installation
------------

pip install tkintertable or easy_install tkintertable
pip install tkintertable

You can clone the current source using

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

https://github.com/dmnfarrell/tkintertable/wiki for more info.




2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

setup(
name = 'tkintertable',
version = '1.3',
version = '1.3.1',
description = 'Extendable table class for Tkinter',
long_description = long_description,
url='https://github.com/dmnfarrell/tkintertable',
Expand Down
41 changes: 21 additions & 20 deletions tkintertable/Filtering.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
except:
from Tkinter import *
from ttk import *
import Pmw
#import Pmw
from types import *
import re

Expand Down Expand Up @@ -177,35 +177,36 @@ def __init__(self, parent, index, fields):
self.index = index
self.filtercol=StringVar()
initial = fields[0]
filtercolmenu = Pmw.OptionMenu(self,
labelpos = 'w',
label_text = 'Column:',
menubutton_textvariable = self.filtercol,
items = fields,
initialitem = initial,
menubutton_width = 10)
filtercolmenu = Combobox(self,
#labelpos = 'w',
#label_text = 'Column:',
textvariable = self.filtercol,
values = fields,
#initialitem = initial,
width = 10)
filtercolmenu.grid(row=0,column=1,sticky='news',padx=2,pady=2)
self.operator=StringVar()
operatormenu = Pmw.OptionMenu(self,
menubutton_textvariable = self.operator,
items = self.operators,
initialitem = 'contains',
menubutton_width = 8)
operatormenu = Combobox(self,
textvariable = self.operator,
values = self.operators,
#initialitem = 'contains',
width = 8)
operatormenu.grid(row=0,column=2,sticky='news',padx=2,pady=2)
self.filtercolvalue=StringVar()
valsbox=Entry(self,textvariable=self.filtercolvalue,width=20)
valsbox.grid(row=0,column=3,sticky='news',padx=2,pady=2)
valsbox.bind("<Return>", self.parent.callback)
self.booleanop=StringVar()
booleanopmenu = Pmw.OptionMenu(self,
menubutton_textvariable = self.booleanop,
items = self.booleanops,
initialitem = 'AND',
menubutton_width = 6)
self.booleanop.set('AND')
booleanopmenu = Combobox(self,
textvariable = self.booleanop,
values = self.booleanops,
#initialitem = 'AND',
width = 6)
booleanopmenu.grid(row=0,column=0,sticky='news',padx=2,pady=2)
#disable the boolean operator if it's the first filter
if self.index == 0:
booleanopmenu.component('menubutton').configure(state=DISABLED)
#if self.index == 0:
# booleanopmenu.component('menubutton').configure(state=DISABLED)
cbutton=Button(self,text='-', command=self.close)
cbutton.grid(row=0,column=5,sticky='news',padx=2,pady=2)
return
Expand Down
4 changes: 1 addition & 3 deletions tkintertable/Prefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,7 @@ def get(self,key):

if key in self.prefs:
return self.prefs[key]
else:
pass
return
return


def delete(self,key):
Expand Down
3 changes: 3 additions & 0 deletions tkintertable/TableModels.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ def getDefaultTypes(self):

def getData(self):
"""Return the current data for saving"""

data = copy.deepcopy(self.data)
data['colors'] = self.colors
data['columnnames'] = self.columnNames
Expand All @@ -177,6 +178,7 @@ def getData(self):
def getAllCells(self):
"""Return a dict of the form rowname: list of cell contents
Useful for a simple table export for example"""

records={}
for row in range(len(self.reclist)):
recdata=[]
Expand All @@ -187,6 +189,7 @@ def getAllCells(self):

def getColCells(self, colIndex):
"""Get the viewable contents of a col into a list"""

collist = []
if self.getColumnType(colIndex) == 'Link':
return ['xxxxxx']
Expand Down
51 changes: 30 additions & 21 deletions tkintertable/Tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -1191,6 +1191,7 @@ def clear():

def convertFormulae(self, rows, cols=None):
"""Convert the formulas in the cells to their result values"""

if len(self.multiplerowlist) == 0 or len(self.multiplecollist) == 0:
return None

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

def paste(self, event=None):
"""Copy from clipboard"""

print (self.parentframe.clipboard_get())
return

def copyCell(self, rows, cols=None):
"""Copy cell contents to a temp internal clipboard"""

row = rows[0]; col = cols[0]
#absrow = self.get_AbsoluteRow(row)
self.clipboard = copy.deepcopy(self.model.getCellRecord(row, col))
return

def pasteCell(self, rows, cols=None):
"""Paste cell from internal clipboard"""

row = rows[0]; col = cols[0]
#absrow = self.get_AbsoluteRow(row)
val = self.clipboard
Expand All @@ -1227,6 +1231,7 @@ def pasteCell(self, rows, cols=None):

def copyColumns(self):
"""Copy current selected cols"""

M = self.model
coldata = {}
for col in self.multiplecollist:
Expand All @@ -1236,6 +1241,7 @@ def copyColumns(self):

def pasteColumns(self, coldata):
"""Paste new cols, overwrites existing names"""

M = self.model
for name in coldata:
if name not in M.columnNames:
Expand Down Expand Up @@ -1920,23 +1926,20 @@ def close_prefsdialog():

#fonts
fts = self.getFonts()

def setFont():
self.thefont = self.fontbox.getcurselection()
self.fontvar = StringVar()
self.fontvar.set(self.prefs.get('celltextfont'))
def setFont(*args):
self.thefont = self.fontvar.get()
return

import Pmw
self.fontbox = Pmw.ScrolledListBox(frame2,
items=(fts),
labelpos='w',
label_text='Font:',
listbox_height = 6,
selectioncommand = setFont,
usehullsize = 1,
hull_width = 200,
hull_height = 80)
self.fontbox.setvalue(self.prefs.get('celltextfont'))
self.fontbox.grid(row=row,column=0, columnspan=2, sticky='nes', padx=3,pady=2)
self.fontbox = Combobox(frame2,
values=(fts),
text='Font:',
height = 6,
textvariable=self.fontvar)
self.fontvar.trace('w', setFont)
Label(frame2,text='Font:').grid(row=row,column=0,padx=3,pady=2)
self.fontbox.grid(row=row,column=1, columnspan=2, sticky='nes', padx=3,pady=2)
row=row+1

lblfontsize=Label(frame2,text='Text Size:')
Expand Down Expand Up @@ -2020,11 +2023,11 @@ def loadPrefs(self, prefs=None):
'rowselectedcolor': self.rowselectedcolor,
'rowheaderwidth': self.rowheaderwidth}

for prop in defaultprefs.keys():
try:
print(self.prefs.get(prop))
except:
self.prefs.set(prop, defaultprefs[prop])
for prop in defaultprefs:
if not prop in self.prefs.prefs:
#print (defaultprefs[prop])
if defaultprefs[prop] != 'None':
self.prefs.set(prop, defaultprefs[prop])

self.defaultprefs = defaultprefs

Expand Down Expand Up @@ -2077,7 +2080,7 @@ def savePrefs(self):
self.prefs.set('linewidth', self.linewidthvar.get())
self.linewidth = self.linewidthvar.get()
self.prefs.set('celltextsize', self.celltextsizevar.get())
self.prefs.set('celltextfont', self.fontbox.getcurselection())
self.prefs.set('celltextfont', self.fontvar.get())
self.prefs.set('cellbackgr', self.cellbackgr)
self.prefs.set('grid_color', self.grid_color)
self.prefs.set('rowselectedcolor', self.rowselectedcolor)
Expand Down Expand Up @@ -2548,6 +2551,7 @@ class RowHeader(Canvas):
takes it's size and rendering from the parent table
This also handles row/record selection as opposed to cell
selection"""

def __init__(self, parent=None, table=None, width=40):
Canvas.__init__(self, parent, bg='gray75', width=width, height=None)

Expand Down Expand Up @@ -2628,6 +2632,7 @@ def handle_left_release(self,event):

def handle_left_ctrl_click(self, event):
"""Handle ctrl clicks - for multiple row selections"""

rowclicked = self.table.get_row_clicked(event)
multirowlist = self.table.multiplerowlist
if 0 <= rowclicked < self.table.rows:
Expand All @@ -2652,6 +2657,7 @@ def handle_right_click(self,event):

def handle_mouse_drag(self, event):
"""Handle mouse moved with button held down, multiple selections"""

if hasattr(self, 'cellentry'):
self.cellentry.destroy()
rowover = self.table.get_row_clicked(event)
Expand Down Expand Up @@ -2680,6 +2686,7 @@ def handle_mouse_drag(self, event):

def drawSelectedRows(self, rows=None):
"""Draw selected rows, accepts a list or integer"""

self.delete('rect')
if type(rows) is not list:
rowlist=[]
Expand All @@ -2694,6 +2701,7 @@ def drawSelectedRows(self, rows=None):

def drawRect(self, row=None, tag=None, color=None, outline=None, delete=1):
"""Draw a rect representing row selection"""

if tag==None:
tag='rect'
if color==None:
Expand All @@ -2716,6 +2724,7 @@ def drawRect(self, row=None, tag=None, color=None, outline=None, delete=1):
class AutoScrollbar(Scrollbar):
"""a scrollbar that hides itself if it's not needed. only
works if you use the grid geometry manager."""

def set(self, lo, hi):
if float(lo) <= 0.0 and float(hi) >= 1.0:
# grid_remove is currently missing from Tkinter!
Expand Down
Loading

0 comments on commit f31f648

Please sign in to comment.