Skip to content

Commit e9e7369

Browse files
committed
1.3 more changes
1 parent fded89b commit e9e7369

9 files changed

Lines changed: 10533 additions & 1385 deletions

File tree

CHANGES

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ CHANGES
77
------
88

99
* now works with python 3
10-
* can provide dict to table constructor
10+
* removed Pmw dependency
11+
* can provide dict to table constructor
1112

1213
------
1314
1.2

description.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
Description
2+
-----------
3+
4+
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.
7+
8+
Installation
9+
------------
10+
11+
pip install tkintertable or easy_install tkintertable
12+
13+
You can clone the current source using
14+
15+
git clone https://github.com/dmnfarrell/tkintertable.git
16+
17+
https://github.com/dmnfarrell/tkintertable/wiki for more info.
18+
19+
20+
21+

setup.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,22 @@
22
import sys,os
33
home=os.path.expanduser('~')
44

5+
with open('description.txt') as f:
6+
long_description = f.read()
7+
58
setup(
69
name = 'tkintertable',
710
version = '1.3',
811
description = 'Extendable table class for Tkinter',
12+
long_description = long_description,
913
url='https://github.com/dmnfarrell/tkintertable',
1014
license='GPL v3',
1115
author = 'Damien Farrell',
1216
author_email = 'farrell.damien[at]gmail.com',
1317
packages = ['tkintertable'],
14-
install_requires=['Pmw','future'],
15-
dependency_links = [
16-
"http://download.sourceforge.net/pmw/Pmw.1.3.tar.gz"],
18+
package_data={'tkintertable': [ '../description.txt']},
19+
install_requires=['future'],
20+
dependency_links = [],
1721
entry_points = { 'gui_scripts': [
1822
'tablesapp = tkintertable.App:main']},
1923
classifiers = ["Operating System :: OS Independent",

tkintertable/App.py

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,19 @@
2323
try:
2424
from tkinter import *
2525
from tkinter.ttk import *
26-
from tkinter import filedialog, messagebox, simpledialog
2726
except:
2827
from Tkinter import *
2928
from ttk import *
29+
if (sys.version_info > (3, 0)):
30+
from tkinter import filedialog, messagebox, simpledialog
31+
from tkinter import font
32+
else:
3033
import tkFileDialog as filedialog
3134
import tkSimpleDialog as simpledialog
3235
import tkMessageBox as messagebox
33-
from tkinter import font
34-
import Pmw
36+
import tkFont as font
37+
38+
#import Pmw
3539
import re, os, time, pickle
3640
from collections import OrderedDict
3741
from .Custom import MyTable
@@ -161,6 +165,7 @@ def create_pulldown(self,menu,dict):
161165

162166
def createSearchBar(self, event=None):
163167
"""Add a find entry box"""
168+
164169
frame = Frame(self.tablesapp_win)
165170
row=0
166171
def close():
@@ -177,9 +182,9 @@ def close():
177182
frame.pack(fill=BOTH, expand=NO)
178183
return
179184

180-
181185
def loadprefs(self):
182186
"""Setup default prefs file if any of the keys are not present"""
187+
183188
defaultprefs = {'textsize':14,
184189
'windowwidth': 800 ,'windowheight':600}
185190
for prop in defaultprefs.keys():
@@ -194,9 +199,9 @@ def showPrefsDialog(self):
194199
self.prefswindow = self.currenttable.showtablePrefs()
195200
return
196201

197-
198202
def new_project(self, data=None):
199203
"""Create a new table, with model and add the frame"""
204+
200205
if hasattr(self,'currenttable'):
201206
self.notebook.destroy()
202207
self.currenttable.destroy()
@@ -219,21 +224,23 @@ def new_project(self, data=None):
219224
return
220225

221226
def open_project(self, filename=None):
227+
222228
if filename == None:
223229
filename=filedialog.askopenfilename(defaultextension='.tblprj"',
224230
initialdir=os.getcwd(),
225231
filetypes=[("TableApp project","*.tblprj"),
226232
("All files","*.*")],
227233
parent=self.tablesapp_win)
228234
if os.path.isfile(filename):
229-
fd=open(filename)
230-
data=pickle.load(fd)
235+
fd = open(filename, 'rb')
236+
data = pickle.load(fd)
231237
fd.close()
232238
self.new_project(data)
233239
self.filename=filename
234240
return
235241

236242
def save_project(self):
243+
237244
if not hasattr(self, 'filename'):
238245
self.save_as_project()
239246
elif self.filename == None:
@@ -245,6 +252,7 @@ def save_project(self):
245252

246253
def save_as_project(self):
247254
"""Save as a new filename"""
255+
248256
filename=filedialog.asksaveasfilename(parent=self.tablesapp_win,
249257
defaultextension='.tblprj',
250258
initialdir=self.defaultsavedir,
@@ -259,13 +267,14 @@ def save_as_project(self):
259267

260268
def do_save_project(self, filename):
261269
"""Get model dicts and write all to pickle file"""
270+
262271
data={}
263272
for s in self.sheets.keys():
264273
currtable = self.sheets[s]
265274
model = currtable.getModel()
266275
data[s] = model.getData()
267276

268-
fd=open(filename,'w')
277+
fd=open(filename,'wb')
269278
pickle.dump(data,fd)
270279
fd.close()
271280
return
@@ -300,10 +309,10 @@ def add_Sheet(self, sheetname=None, sheetdata=None):
300309

301310
def checksheet_name(name):
302311
if name == '':
303-
tkMessageBox.showwarning("Whoops", "Name should not be blank.")
312+
messagebox.showwarning("Whoops", "Name should not be blank.")
304313
return 0
305314
if name in self.sheets:
306-
tkMessageBox.showwarning("Name exists", "Sheet name already exists!")
315+
messagebox.showwarning("Name exists", "Sheet name already exists!")
307316
return 0
308317
names = [self.notebook.tab(i, "text") for i in self.notebook.tabs()]
309318
noshts = len(names)
@@ -331,13 +340,17 @@ def checksheet_name(name):
331340

332341
def delete_Sheet(self):
333342
"""Delete a sheet"""
334-
s = self.notebook.getcurselection()
335-
self.notebook.delete(s)
343+
344+
s = self.notebook.index(self.notebook.select())
345+
name = self.notebook.tab(s, 'text')
346+
#self.notebook.delete(s)
347+
self.notebook.forget(s)
336348
del self.sheets[s]
337349
return
338350

339351
def copy_Sheet(self, newname=None):
340352
"""Copy a sheet"""
353+
341354
newdata = self.currenttable.getModel().getData().copy()
342355
if newname==None:
343356
self.add_Sheet(None, newdata)
@@ -347,7 +360,9 @@ def copy_Sheet(self, newname=None):
347360

348361
def rename_Sheet(self):
349362
"""Rename a sheet"""
350-
s = self.notebook.getcurselection()
363+
364+
#s = self.notebook.getcurselection()
365+
s = self.notebook.index(self.notebook.select())
351366
newname = simpledialog.askstring("New sheet name?", "Enter new sheet name:",
352367
initialvalue=s)
353368
if newname == None:
@@ -358,8 +373,10 @@ def rename_Sheet(self):
358373

359374
def setcurrenttable(self, event):
360375
"""Set the currenttable so that menu items work with visible sheet"""
376+
361377
try:
362-
s = self.notebook.getcurselection()
378+
#s = self.notebook.getcurselection()
379+
s = self.notebook.index(self.notebook.select())
363380
self.currenttable = self.sheets[s]
364381
except:
365382
pass
@@ -373,30 +390,35 @@ def add_Row(self):
373390

374391
def delete_Row(self):
375392
"""Delete currently selected row"""
393+
376394
self.currenttable.deleteRow()
377395
self.saved = 0
378396
return
379397

380398
def add_Column(self):
381399
"""Add a new column"""
400+
382401
self.currenttable.addColumn()
383402
self.saved = 0
384403
return
385404

386405
def delete_Column(self):
387406
"""Delete currently selected column in table"""
388-
self.currenttable.delete_Column()
407+
408+
self.currenttable.deleteColumn()
389409
self.saved = 0
390410
return
391411

392412
def autoAdd_Rows(self):
393413
"""Auto add x rows"""
414+
394415
self.currenttable.autoAddRows()
395416
self.saved = 0
396417
return
397418

398419
def autoAdd_Columns(self):
399420
"""Auto add x rows"""
421+
400422
self.currenttable.autoAddColumns()
401423
self.saved = 0
402424
return
@@ -407,6 +429,7 @@ def findValue(self):
407429

408430
def do_find_text(self, event=None):
409431
"""Find the text in the table"""
432+
410433
if not hasattr(self,'currenttable'):
411434
return
412435
import string
@@ -419,6 +442,7 @@ def do_find_text(self, event=None):
419442

420443
def do_find_again(self, event=None):
421444
"""Find again"""
445+
422446
if not hasattr(self,'currenttable'):
423447
return
424448
searchstring=self.findtext.get()
@@ -435,6 +459,7 @@ def plotSetup(self, event=None):
435459
return
436460

437461
def about_Tables(self):
462+
438463
self.ab_win=Toplevel()
439464
self.ab_win.geometry('+100+350')
440465
self.ab_win.title('About TablesApp')
@@ -459,6 +484,7 @@ def about_Tables(self):
459484

460485
def online_documentation(self,event=None):
461486
"""Open the online documentation"""
487+
462488
import webbrowser
463489
link='http://sourceforge.net/projects/tkintertable/'
464490
webbrowser.open(link,autoraise=1)
@@ -471,6 +497,7 @@ def quit(self):
471497

472498
class ToolBar(Frame):
473499
"""Uses the parent instance to provide the functions"""
500+
474501
def __init__(self, parent=None, parentapp=None):
475502
Frame.__init__(self, parent, width=600, height=40)
476503
from . import Table_images

tkintertable/Dialogs.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,19 @@
2323
try:
2424
from tkinter import *
2525
from tkinter.ttk import *
26-
from tkinter import filedialog, messagebox, simpledialog
27-
from tkinter.simpledialog import Dialog
28-
from tkinter import font
2926
except:
3027
from Tkinter import *
3128
from ttk import *
29+
if (sys.version_info > (3, 0)):
30+
from tkinter import filedialog, messagebox, simpledialog
31+
from tkinter.simpledialog import Dialog
32+
from tkinter import font
33+
else:
3234
import tkFileDialog as filedialog
3335
import tkSimpleDialog as simpledialog
3436
import tkMessageBox as messagebox
3537
from tkSimpleDialog import Dialog
36-
#import TkFont as font
38+
import tkFont as font
3739

3840
class RecordViewDialog(Dialog):
3941
"""Dialog for viewing and editing table records"""
@@ -106,7 +108,7 @@ class MultipleValDialog(simpledialog.Dialog):
106108
"""Simple dialog to get multiple values"""
107109

108110
def __init__(self, parent, title=None, initialvalues=None, labels=None, types=None):
109-
if labels != None and types != NoneType:
111+
if labels != None:
110112
self.initialvalues = initialvalues
111113
self.labels = labels
112114
self.types = types

0 commit comments

Comments
 (0)