Re: (n00b) Tkinter trouble
On Sun, Nov 13, 2011 at 1:27 PM, Jason Swails wrote: > Hello, > > I'm trying my hand at creating a Tkinter application, but not having much > luck. I'm trying to have my top level window be a series of buttons with > different options on them. Every time a button is pressed, it opens up a > new window with options. While that new window is open, all of the buttons > on the original window are disabled. However, I want all of those buttons > to become active again once I quit my new window. I can't seem to > reactivate those buttons no matter what I do. > > This is the approach I'm trying: > > #!/usr/bin/env python > > from Tkinter import * > > class ActionButton(Button): >def __init__(self, frame, text): > self.frame = frame > Button.__init__(self, master=self.frame, text=text, > command=self.execute) >def execute(self): > window = Toplevel() > new_button = ActionButton(window, '2nd level button') > quit_button = Button(window, text='Quit!', command=window.destroy) > window.buttons = [new_button, quit_button] > for button in window.buttons: button.pack() > # Deactivate buttons from containing shell > for button in self.frame.buttons: button.config(state=DISABLED) > window.mainloop() > for button in self.frame.buttons: button.config(state=ACTIVE) > > > top = Tk() > top_button = ActionButton(top, 'Button on top!') > top_button.pack() > quit_button = Button(top, text='Quit', command=top.destroy) > quit_button.pack() > > top.buttons = [top_button, quit_button] > > top.mainloop() > > I'm really kind of running around in the dark here, so any advice or > explanation is appreciated. > Another approach I think will work, and that I'm going to try, is to subclass Toplevel and simply assign the higher-level frame/window as an instance attribute. Then, I can reactivate all of the buttons in the destroy() method before calling the destroy() method of Toplevel on self. Something like this: [untested] class MyToplevel(Toplevel): def __init__(self, root, **options): self.root = root Toplevel.__init__(self, options) for button in self.root.buttons: button.config(state=DISABLED) def destroy(self): for button in self.root.buttons: button.config(state=ACTIVE) Toplevel.destroy(self) This allows me to avoid running "mainloop()" on a non-root Toplevel instance, but links the re-activation of the buttons with the destruction of the child window (which was the effect I was going for). I must not understand what mainloop() does, fully (does it only make sense to run it on Tkinter.Tk()?) Thanks! Jason -- http://mail.python.org/mailman/listinfo/python-list
Re: Get keys from a dicionary
On Nov 11, 11:31 pm, macm wrote: > > I pass a nested dictionary to a function. > > def Dicty( dict[k1][k2] ): > print k1 > print k2 > > There is a fast way (trick) to get k1 and k2 as string. It might be possible to do something using a reverse dictionary and getting rid of the nested dictionary. This is a quick and simple 'two-way' dictionary class that works by maintaining two dictionaries: the original key/value, and the reversed value/key. It returns a list of keys, allowing for a value to be assigned against more than from collections import defaultdict class TwoWayDict(dict): def __init__(self, *args, **kwargs): self._reversed = defaultdict(list) for key, val in kwargs.iteritems(): self[key] = val def __setitem__(self, key, value): super(TwoWayDict, self).__setitem__(key, value) self._reversed[value].append(key) def getkeys(self, match): return self._reversed[match] >>> original = TwoWayDict(a=100,b='foo',c=int,d='foo') >>> original.getkeys(100) ['a'] >>> original.getkeys('foo') ['b', 'd'] As for the nested dictionary, you could replace it with a _single_ dictionary that uses a composite key: >>> original = TwoWayDict(a=100,b=100) >>> original.getkeys(100) ['a', 'b'] >>> original = TwoWayDict() >>> original['record1','user1'] = 'martin' >>> original['record1','user2'] = 'robert' >>> original['record2','user1'] = 'robert' >>> original.getkeys('robert') [('record1', 'user2'), ('record2', 'user1')] > Whithout loop all dict. Just it! The TwoWayDict class removes the need to loop across the dict looking for keys that match a value by replacing it with another dict lookup. Reducing the nested dict to a single dict with composite keys removes the need to traverse the outer dict to compare against its children. -- http://mail.python.org/mailman/listinfo/python-list
Re: Get keys from a dicionary
On Nov 11, 11:31 pm, macm wrote: > > I pass a nested dictionary to a function. > > def Dicty( dict[k1][k2] ): > print k1 > print k2 > > There is a fast way (trick) to get k1 and k2 as string. It might be possible to do something using a reverse dictionary and getting rid of the nested dictionary. This is a quick and simple 'two-way' dictionary class that works by maintaining two dictionaries: the original key/value, and the reversed value/key. It returns a list of keys, allowing for a value to be assigned against more than from collections import defaultdict class TwoWayDict(dict): def __init__(self, *args, **kwargs): self._reversed = defaultdict(list) for key, val in kwargs.iteritems(): self[key] = val def __setitem__(self, key, value): super(TwoWayDict, self).__setitem__(key, value) self._reversed[value].append(key) def getkeys(self, match): return self._reversed[match] >>> original = TwoWayDict(a=100,b='foo',c=int,d='foo') >>> original.getkeys(100) ['a'] >>> original.getkeys('foo') ['b', 'd'] As for the nested dictionary, you could replace it with a _single_ dictionary that uses a composite key: >>> original = TwoWayDict(a=100,b=100) >>> original.getkeys(100) ['a', 'b'] >>> original = TwoWayDict() >>> original['record1','user1'] = 'martin' >>> original['record1','user2'] = 'robert' >>> original['record2','user1'] = 'robert' >>> original.getkeys('robert') [('record1', 'user2'), ('record2', 'user1')] > Whithout loop all dict. Just it! The TwoWayDict class removes the need to loop across the dict looking for keys that match a value by replacing it with another dict lookup. Reducing the nested dict to a single dict with composite keys removes the need to traverse the outer dict to compare against its children. -- http://mail.python.org/mailman/listinfo/python-list
Re: Uninstalling Py 2.5.2 from Windows 7 (Invalid on Win 32 app)
I just pushed aside the python25 folder by renaming it, and installed py 2.5.2. However, when I try to open the simplest of py programs with IDLE, I get an error from Win7. c:\Users\blah\...\junk.py is not a valid Win 32 app. Here's one: def abc(one): print "abc: ", one, " is one" def duh(two): print "duh: ",abc(2) abc(1) duh(2) duh("so what") abc(36.333) -- http://mail.python.org/mailman/listinfo/python-list
Re: all() is slow?
> It states equivalence for two values _based on the name_. I don't know what you mean. "Based on the name" doesn't mean anything in particular to me in this context. > So you're outright ignoring the comments that this behaviour is to > make CPython more performant? I don't see how I'm ignoring the comment. Yes, breaking the spec improves performance. Is that a reason to not fix the spec, or something? Devin On Sun, Nov 13, 2011 at 9:50 PM, alex23 wrote: > On Nov 13, 4:28 pm, Devin Jeanpierre wrote: >> > which implies that getattr(x, 'a!b') should be equivalent to x.a!b >> >> No, it does not. The documentation states equivalence for two >> particular values > > It states equivalence for two values _based on the name_. > > "If the string is the name of one of the object’s attributes, the > result is the value of that attribute. For example, getattr(x, > 'foobar') is equivalent to x.foobar." > > The string 'a!b' is the name of the attribute, ergo getattr(x, 'a!b') > _is_ x.a!b. If x.a!b isn't valid CPython, then etc. > >> CPython breaks that equivalence > > So you're outright ignoring the comments that this behaviour is to > make CPython more performant? > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list
Re: all() is slow?
On Nov 13, 4:28 pm, Devin Jeanpierre wrote: > > which implies that getattr(x, 'a!b') should be equivalent to x.a!b > > No, it does not. The documentation states equivalence for two > particular values It states equivalence for two values _based on the name_. "If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar." The string 'a!b' is the name of the attribute, ergo getattr(x, 'a!b') _is_ x.a!b. If x.a!b isn't valid CPython, then etc. > CPython breaks that equivalence So you're outright ignoring the comments that this behaviour is to make CPython more performant? -- http://mail.python.org/mailman/listinfo/python-list
Re: Slave to master auto linking.
2011/11/14 Богун Дмитрий : > m = master() > s = m.slave() > s.master is m > Can you simply have m.slave() pass a parameter to the slave's constructor? class Master(object): class Slave(object): def __init__(self,master): self.master=master print 'Slave.__init__: self.master: ', self.master def slave(self): return self.Slave(self) Alternatively, you don't have to nest the classes at all: class Slave(object): def __init__(self,master): self.master=master print 'Slave.__init__: self.master: ', self.master class Master(object): def slave(self): return Slave(self) By passing 'self' to the Slave() constructor, I give the slave a chance to keep a reference to its own master. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list
Slave to master auto linking.
Hello. I try make some weird thing. I want to get from code like this: class master: ... class slave: ... m = master() s = m.slave() s.master is m Last expression must be true. I want link "master" to be set automatically by master object while creating slave object. Additional requirement - "master" link must be available for constructor of slave object. Best what I can get is: import functools from weakref import WeakKeyDictionary from threading import RLock class meth_wrap(object): def __init__(self, func): object.__init__(self) self.func = func functools.update_wrapper(self, func, updated=()) class lazy_attr(meth_wrap): def __get__(self, obj, type=None): if obj is None: return self val = self.func(obj) setattr(obj, self.__name__, val) return val class slave_mixin(object): @lazy_attr def master(self): m = slave_gen._unbound_master assert m is not None, '"Slave" object can\'t find master link. Is it was correctly created? obj:%s' % repr(self) return m class slave_gen(meth_wrap): _storage = WeakKeyDictionary() # Используется глобально _unbound_master = None _lock = RLock() def __get__(self, mobj, type=None): if mobj is None: return self.func d = { 'm': mobj, 'w': self} obj = self.delay_init() self._storage[obj] = d functools.update_wrapper(obj, self.func, updated=()) return obj class delay_init(object): def __call__(self, *args, **kw_args): d = slave_gen._storage[self] slave_gen._lock.acquire() try: slave_gen._unbound_master = d['m'] obj = d['w'].func(*args, **kw_args) obj.master = d['m'] slave_gen._unbound_master = None finally: slave_gen._lock.release() return obj def __getattr__(self, attr): d = slave_gen._storage[self] return getattr(d['m'], attr) def __setattr__(self, attr, val): d = slave_gen._storage[self] return setattr(d['m'], attr, val) class Master(object): @slave_gen class Slave(slave_mixin): def __init__(self): slave_mixin.__init__(self) print 'Slave.__init__: self.master: ', self.master if __name__ == '__main__': m = Master() s = m.Slave() print 's.master: ', s.master It works, by looking little weird... and I can't find way to escape from using lock at object creation phase. It can be done by adding mandatory attribute to slave class constructor, but this is even worse(for me) than using lock. Please show me more clear way to make this slave to master link. PS Sorry for my English. -- Богун Дмитрий aka vugluskr -- http://mail.python.org/mailman/listinfo/python-list
[ANN] PikoTest.py - a small testing library
I released PikoTest.py 0.1.0. http://pypi.python.org/pypi/PicoTest PikoTest.py is a samll testing library for Python. Features: * Structured Test * Setup/Teardown * Fixture Injection * Skip Test * TODO Example:: from __future__ import with_statement import picotest test = picotest.new() with test("type 'str'"): with test("operator '*'"): @test("repeats string N times.") def _(self): self.assertEqual("AAA", "A" * 3) @test("returns empty string when N is negative.") def _(self): self.assertEqual("", "A" * -1) if __name__ == '__main__': picotest.main() Output example:: $ python -m picotest -h# show help $ python example_test.py # or python -m picotest example_test.py example_test.py * type 'str' * operator '*' - [passed] repeats string N times. - [passed] returns empty string when N is negative. ## total:2, passed:2, failed:0, error:0, skipped:0, todo:0 See http://pypi.python.org/pypi/PicoTest for details. -- regards, makoto kuwata -- http://mail.python.org/mailman/listinfo/python-list
Re: Uninstalling Py 2.5.2 from Windows 7
Well, let be a careful a little more. I have PIL, numpy, scipy, pymatplotlib and pyephem installed, I think. There are Removeexe files in the python25 folder for them. There's also a Removepy2exe.exe. Probably that was somehow used to get out py2.5. -- http://mail.python.org/mailman/listinfo/python-list
Re: Uninstalling Py 2.5.2 from Windows 7
On 11/13/2011 2:08 PM, Terry Reedy wrote: On 11/13/2011 12:46 PM, W. eWatson wrote: For many months I had sporadically used 2.5.2 under Win 7, then something went awry. I tried an uninstall/install and it didn't get any better. I thought I'd take another shot at it today. The uninstall went OK, but c:\python25 remained with several py files and a folder, Lib. I went ahead with the install and got a msg that asked if I wanted to write over the python25 folder. Uninstall (should) only uninstall files that it installed and directories that are empty. The 'several py files' should be files that you or some third-party software installed. I personally put everything I write under /pythonxy in a subdirectory thereof that install and uninstall pay no attention to. The Lib directory contains all the python-coded stdlib modules. Unless you know there is something that you wrote that you want, I would delete it before re-installing. I suspect that current installers work a bit better than 2.5. I would definitely use the latest 2.5.z that comes with an installer and not 2.5.2. They are all the same version of the language. The only difference is bug fixes. Thanks to both of you. Deleting python25 folder. Nothing of personal use in it. -- http://mail.python.org/mailman/listinfo/python-list
Re: Trying to write beautifulsoup result to a file and get error message
On 13/11/2011 22:37, goldtech wrote: If I try: ... soup = BeautifulSoup(ft3) f = open(r'c:\NewFolder\clean4.html', "w") f.write(soup) f.close() I get error message: Traceback (most recent call last): File "C:\Documents and Settings\user01\Desktop\py\tb1a.py", line 203, in f.write(soup) TypeError: expected a character buffer object I want to write beautiful soup's result to a file, I am doing something wrong. Help appreciated. What do you mean by "beautiful soup's result"? The original HTML is text, and you want it to write some text to the file, but what exactly are you expecting it to write? -- http://mail.python.org/mailman/listinfo/python-list
Trying to write beautifulsoup result to a file and get error message
If I try: ... soup = BeautifulSoup(ft3) f = open(r'c:\NewFolder\clean4.html', "w") f.write(soup) f.close() I get error message: Traceback (most recent call last): File "C:\Documents and Settings\user01\Desktop\py\tb1a.py", line 203, in f.write(soup) TypeError: expected a character buffer object I want to write beautiful soup's result to a file, I am doing something wrong. Help appreciated. Thanks -- http://mail.python.org/mailman/listinfo/python-list
Re: Use and usefulness of the as syntax
On 11/13/2011 3:55 AM, 0xfn wrote: On Nov 12, 7:48 am, Rafael Durán Castañeda wrote: El 12/11/11 13:43, Tim Chase escribió:> I hate trying to track down variable-names if one did something like from Tkinter import * +1 Really, this questionable code is always mentioned as example in Tkinter tuts. I see it is still in the 3.2 tkinter doc, near the top. IMHO much better is import Tkinter as tk My opinion also. I will think about changing it someday, but then all the examples will need to be changed ;-). So it will not be trivial. -- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
Re: Uninstalling Py 2.5.2 from Windows 7
On 11/13/2011 12:46 PM, W. eWatson wrote: For many months I had sporadically used 2.5.2 under Win 7, then something went awry. I tried an uninstall/install and it didn't get any better. I thought I'd take another shot at it today. The uninstall went OK, but c:\python25 remained with several py files and a folder, Lib. I went ahead with the install and got a msg that asked if I wanted to write over the python25 folder. Uninstall (should) only uninstall files that it installed and directories that are empty. The 'several py files' should be files that you or some third-party software installed. I personally put everything I write under /pythonxy in a subdirectory thereof that install and uninstall pay no attention to. The Lib directory contains all the python-coded stdlib modules. Unless you know there is something that you wrote that you want, I would delete it before re-installing. I suspect that current installers work a bit better than 2.5. I would definitely use the latest 2.5.z that comes with an installer and not 2.5.2. They are all the same version of the language. The only difference is bug fixes. -- Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list
Re: can't decompress data; zlib not available
On Sun, 2011-11-13 at 11:17 -0700, Steve Edlefsen wrote: > > which appears to install zlib when python is reinstalled. Except I > can't run make without errors and there is no configuration file. > > How do I reinstall python to include zlib? Which OS are you on? Linux? BSD? How did you install Plone? First I'd check if there's a module shadowing the builtin zlib module - i.e. if you've got a local file called "zlib.py" which is getting imported by mistake. Fairly much all *nix systems will have a python installation out of the box - it looks like you need python2.6 I've never had a missing zlib module - but it's possible that it might be missing if you don't have the zlib/deflate headers installed - if they're not available then I'd try installing them and then reinstalling the package you started with. Tim Wintle -- http://mail.python.org/mailman/listinfo/python-list
Re: Uninstalling Py 2.5.2 from Windows 7
On 13-11-11 18:46, W. eWatson wrote: For many months I had sporadically used 2.5.2 under Win 7, then something went awry. I tried an uninstall/install and it didn't get any better. I thought I'd take another shot at it today. The uninstall went OK, but c:\python25 remained with several py files and a folder, Lib. I went ahead with the install and got a msg that asked if I wanted to write over the python25 folder. I figured maybe I should ask about this. It's probably OK. Yes, I know I have an old version of Python, but I need it occasionally. Comments? Just go ahead and manually delete c:\python25 and everything in it. But make sure that the leftover stuff in there is something you won't need again, or that you can get back by re-installing the third party library that it was part of. Then re-install from the 2.5.2 msi. (Or perhaps 2.5.4). Irmen -- http://mail.python.org/mailman/listinfo/python-list
(n00b) Tkinter trouble
Hello, I'm trying my hand at creating a Tkinter application, but not having much luck. I'm trying to have my top level window be a series of buttons with different options on them. Every time a button is pressed, it opens up a new window with options. While that new window is open, all of the buttons on the original window are disabled. However, I want all of those buttons to become active again once I quit my new window. I can't seem to reactivate those buttons no matter what I do. This is the approach I'm trying: #!/usr/bin/env python from Tkinter import * class ActionButton(Button): def __init__(self, frame, text): self.frame = frame Button.__init__(self, master=self.frame, text=text, command=self.execute) def execute(self): window = Toplevel() new_button = ActionButton(window, '2nd level button') quit_button = Button(window, text='Quit!', command=window.destroy) window.buttons = [new_button, quit_button] for button in window.buttons: button.pack() # Deactivate buttons from containing shell for button in self.frame.buttons: button.config(state=DISABLED) window.mainloop() for button in self.frame.buttons: button.config(state=ACTIVE) top = Tk() top_button = ActionButton(top, 'Button on top!') top_button.pack() quit_button = Button(top, text='Quit', command=top.destroy) quit_button.pack() top.buttons = [top_button, quit_button] top.mainloop() I'm really kind of running around in the dark here, so any advice or explanation is appreciated. Thanks! Jason -- http://mail.python.org/mailman/listinfo/python-list
can't decompress data; zlib not available
Hi, I'm trying to install a tool for Plone called ZopeSkel, but when I run the setup file ez_setup.py, I get dr_shred@merle:~$ ez_setup.py Downloading http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg Traceback (most recent call last): File "/home/dr_shred/python/ez_setup.py", line 279, in ? main(sys.argv[1:]) File "/home/dr_shred/python/ez_setup.py", line 213, in main from setuptools.command.easy_install import main zipimport.ZipImportError: can't decompress data; zlib not available I believe this means the python installation didn't include zlib. Python was installed with Plone and has the following config directory: dr_shred@merle:/usr/local/Plone/Python-2.6/lib/python2.6/config$ ls -l total 10208 -rw-r--r-- 1 root root 2139 2011-10-24 17:53 config.c -rw-r--r-- 1 root root 1507 2011-10-24 17:53 config.c.in -rwxr-xr-x 1 root root 7122 2011-10-24 17:53 install-sh -rw-r--r-- 1 root root 10342706 2011-10-24 17:53 libpython2.6.a -rw-r--r-- 1 root root42568 2011-10-24 17:53 Makefile -rwxr-xr-x 1 root root 7431 2011-10-24 17:53 makesetup -rw-r--r-- 1 root root 6528 2011-10-24 17:53 python.o -rw-r--r-- 1 root root18265 2011-10-24 17:53 Setup -rw-r--r-- 1 root root 368 2011-10-24 17:53 Setup.config -rw-r--r-- 1 root root 41 2011-10-24 17:53 Setup.local There's no readme file, or anything to describe how it all works. The Setup file has an entry zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz which appears to install zlib when python is reinstalled. Except I can't run make without errors and there is no configuration file. How do I reinstall python to include zlib? Many Thanks, Steve Edlefsen -- http://mail.python.org/mailman/listinfo/python-list
Uninstalling Py 2.5.2 from Windows 7
For many months I had sporadically used 2.5.2 under Win 7, then something went awry. I tried an uninstall/install and it didn't get any better. I thought I'd take another shot at it today. The uninstall went OK, but c:\python25 remained with several py files and a folder, Lib. I went ahead with the install and got a msg that asked if I wanted to write over the python25 folder. I figured maybe I should ask about this. It's probably OK. Yes, I know I have an old version of Python, but I need it occasionally. Comments? -- http://mail.python.org/mailman/listinfo/python-list
Re: xmlrpclib date times and a trailing Z
On Nov 11, 7:20 pm, Travis Parks wrote: > I am trying to connect to Marchex's a call tracking software using > xmlrpclib. I was able to get some code working, but I ran into a > problem dealing with transfering datetimes. > > When I construct a xmlrpclib.ServerProxy, I am setting the > use_datetime flag to indicate that I want to automatically convert > back and forth between date times in the datetime library. > > I have a working version that doesn't use this flag, and I have to > convert from the xmlrpclib.DateTime type to the datetime.datetime type > manually, via string parsing. > > The thing is, Marchex's API returns date's with a trailing Z, after > the time component. I did some research and this is supposed to be an > indicator that UTC was used. However, it doesn't seem like the > xmlrpclib likes it very much. > > It looks like it is using this code internally: time.strptime(data, "%Y > %m%dT%H:%M:%S") > > This code doesn't look like it handles time zones at all. I guess, is > there a way to tell xmlrpclib to include time zones when parsing date > times? > > Thanks, > Travis Parks I did some chatting on IRC and it seems that the date/time format is not very well defined in XML RPC specs. So, basically, Marchex is using a format that the XML RPC library doesn't support. Strangely, Marchex supports incoming dates with the format MMddThhmmss. It just spits dates back out with -MM-ddThh:mm:ssZ. The ISO8601 standard seems to be used a lot, so it is surprising the library doesn't try multiple formats, at least. I find it strange that the library, in light of the fact that date formats aren't standardized, doesn't provide the ability to configure this. I also find it strange that the library doesn't incorporate Basic Authentication using urllib2, but instead rolls its own method of putting username:password@ before the netloc. I wish Python's libraries acted more like an integrated framework than just unrelated libraries. I suppose I am spoiled from years of working with all-in-one frameworks managed by a single group. That is not the way C/C++ works or how Linux works. The power generated by using a conglomeration of unrelated libraries is indisputable, even if it can be a productivity killer and just plain confusing. -- http://mail.python.org/mailman/listinfo/python-list
Re: How to indent blocks when readline completion is on?
On Mon, Nov 14, 2011 at 12:30 AM, Steven D'Aprano wrote: > I thought I could add a wrapper around the rlcompleter method, like this: > import readline import rlcompleter readline.parse_and_bind("tab: complete") completer = readline.get_completer() def wrapped_completer(text, state): > ... if not text or text.isspace(): > ... return "\t" > ... else: > ... return completer(text, state) > ... readline.set_completer(wrapped_completer) Attempting to duplicate this failed in my Py3 (no readline module - probably I didn't have the dev version when I built that Python), but in Py2, I can see the same issue. The wrapped_completer function is called repeatedly with successive values for 'state', and it needs to return None at some point to indicate that there are no more possibilities. (Why isn't it specced to simply return an iterable?) >>> def wrapped_completer(text, state): ... if not text or text.isspace(): ... if state: return None ... return "\t" ... else: ... return completer(text, state) ... This function appears (to me!) to do what you're looking for; it allows me to enter tabs while still using tab completion. However, I seem to have some slightly different tab-completion settings somewhere (for instance, typing "whi" produces "while" with no space after it, so I need to type " Tr" not "Tr"), so this may not work on your setup. ChrisA -- http://mail.python.org/mailman/listinfo/python-list
How to indent blocks when readline completion is on?
I have set up readline completion as described here: http://docs.python.org/library/rlcompleter.html Now how do I indent blocks in the interactive interpreter? If I press the TAB key, the completer prompts me instead of indenting: >>> readline.parse_and_bind("tab: complete") >>> while True: ... Display all 182 possibilities? (y or n) ... Surely I'm not stuck with indenting by manually typing spaces? I thought I could add a wrapper around the rlcompleter method, like this: >>> import readline >>> import rlcompleter >>> readline.parse_and_bind("tab: complete") >>> completer = readline.get_completer() >>> def wrapped_completer(text, state): ... if not text or text.isspace(): ... return "\t" ... else: ... return completer(text, state) ... >>> readline.set_completer(wrapped_completer) Completion appears to work if I have something in the line to start with, e.g. if I type "whi" TAB "Tr" TAB I get "while True", but if I press TAB on an empty line (intending to get an actual tab character for indentation), it plays merry havoc with my session. All keyboard input appears to be dead, eventually I used Ctrl-Z to interrupt the process and killed it from the shell. -- Steven -- http://mail.python.org/mailman/listinfo/python-list
socket.socket.makefile
I'm writing an alternative socket module, and have come across the code for the makefile call, which mentions the following: (XXX refactor to share code?) http://hg.python.org/cpython/file/27adb952813b/Lib/socket.py#l149 Has this been refactored elsewhere? Is there something I can use to wrap the SocketIO inheriting from RawIOBase in all the variants the io.open/socket.makefile functions return for me? -- http://mail.python.org/mailman/listinfo/python-list
RE: Dynamically altering __init__
I wrote: """ I will post a link to a complete example once I have done the AST transformations etc. I hope this will be useful to readers of this list. I didn't find such an example, so maybe the next asker will find it... """ Finally got time to do this. The example can be found at: https://github.com/akaariai/ast_model In the example I rewrote a small part of Django's model __init__ to use: self.field1, self.field2, ... = args instead of: for f_name, val in izip(field_names, args): setattr(self, f_name, val) The speedup of that rewrote is about 50% for a model having 10 fields. The example implementation might not be optimal, but it seems to work. I hope it will be useful to the readers of this list. It was a nice learning experience for me. Thanks for your help, - Anssi Kääriäinen -- http://mail.python.org/mailman/listinfo/python-list
Re: Use and usefulness of the as syntax
On Nov 12, 7:48 am, Rafael Durán Castañeda wrote: > El 12/11/11 13:43, Tim Chase escribió:> I hate trying to track down > variable-names if one did something like > > > from Tkinter import * > > +1 Really, this questionable code is always mentioned as example in Tkinter tuts. IMHO much better is >>> import Tkinter as tk In common case `as` is useful when: 1. You `import ThirdPartyModuleWithTerriblyLongName as tpm` 2. Whant to free some common variable name, which is engaged by module name by default (right what Mel Wilson has pictured) -- http://mail.python.org/mailman/listinfo/python-list