473,418 Members | 2,053 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,418 software developers and data experts.

Tkinter: cut'n'paste from DISABLED window?

Our Tkinter application has a big ScrolledText widget which is
a log of everything that happens. In order to prevent people
from making changes, we have it in DISABLED mode except when
the program wants to write a new entry. This works OK, except
that sometimes we want to copy out of piece of the contents and
paste it in another window. When it's DISABLED, it appears
that we can't even select a portion of the text.

Is this an either-or situation? Or is there some clever way to
get around it?

If it matters, we want this to work on both Linux and Windows.

--
* Patrick L. Nolan *
* W. W. Hansen Experimental Physics Laboratory (HEPL) *
* Stanford University *
Jul 18 '05 #1
4 5236
Patrick L. Nolan wrote:
Our Tkinter application has a big ScrolledText widget which is
a log of everything that happens. In order to prevent people
from making changes, we have it in DISABLED mode except when
the program wants to write a new entry. This works OK, except
that sometimes we want to copy out of piece of the contents and
paste it in another window. When it's DISABLED, it appears
that we can't even select a portion of the text.

Is this an either-or situation? Or is there some clever way to
get around it?

If it matters, we want this to work on both Linux and Windows.


I don't know if this will help, but maybe it will provide a hint...

In a native Windows app, the way you do this is to make the edit control
read-only instead of disabled. For example, if you right-click a file in
Windows and select Properties, you'll notice that you can select and copy
text from any of the text fields in the General tab of the property sheet.

The way this is done is by making those text fields Edit controls with the
ES_READONLY style (and without the WS_DISABLED style).

-Mike
Jul 18 '05 #2
"Patrick L. Nolan" <pl*@cosmic.stanford.edu> wrote in message news:<c4**********@news.Stanford.EDU>...
Our Tkinter application has a big ScrolledText widget which is
a log of everything that happens. In order to prevent people
from making changes, we have it in DISABLED mode except when
the program wants to write a new entry. This works OK, except
that sometimes we want to copy out of piece of the contents and
paste it in another window. When it's DISABLED, it appears
that we can't even select a portion of the text.

Is this an either-or situation? Or is there some clever way to
get around it?

If it matters, we want this to work on both Linux and Windows.


The question is if you really need a Tkinter.Text-widget or if a
Tkinter.Listbox would satisfy your wishes. Then you could program
a scrollable Listbox as the following example:

# Vertical scrollbar for listbox
vscroll=Tkinter.Scrollbar(self,orient='vertical')
vscroll.grid(row=3,rowspan=10,column=11,sticky='ns ')

# horizontal scrollbar for listbox
hscroll=Tkinter.Scrollbar(self,orient='horizontal' )
hscroll.grid(row=13,column=2,columnspan=9,sticky=' ew')

# Listbox
self.msgBox=Tkinter.Listbox(self,
bg='white',
relief='sunken',
xscrollcommand=hscroll.set,
yscrollcommand=vscroll.set,
)
self.msgBox.grid(row=3,rowspan=10,column=2,columns pan=9,sticky='nesw')

hscroll.configure(command=self.msgBox.xview)
vscroll.configure(command=self.msgBox.yview)
Then bind to all widgets to the event-function for Cntrl-C:

self.bind_all('<Control-KeyPress-c>',self.Copy)

Where the Copy-function could look as follows:

#-----------------------------------
def Copy (self, *event):
#-----------------------------------
"""
Copies selected lines in the Listbox to Cilpboard

@para event: Dummy-parameter
@type event: list
@return: None
@rtype: NN
"""
if self.msgBox.size():
cs=self.msgBox.curselection()
if cs:
# Overwirte the clipboardcontent
self.msgBox.clipboard_clear()
for lineno in cs:
self.msgBox.clipboard_append(self.msgBox.get(linen o)+'\n')

I use the above example in the same app under W2kprof and HP-UX and
it works fine.

Regards
Peter
Jul 18 '05 #3
Michael Geary wrote:

I don't know if this will help, but maybe it will provide a hint...

In a native Windows app, the way you do this is to make the edit control
read-only instead of disabled. For example, if you right-click a file in
Windows and select Properties, you'll notice that you can select and copy
text from any of the text fields in the General tab of the property sheet.

The way this is done is by making those text fields Edit controls with the
ES_READONLY style (and without the WS_DISABLED style).


Tk's Text widget is a custom widget, which doesn't rely on Windows native
widgets.

however, in recent versions, many Tk entry widgets supports both
state="disabled"
and state="readonly", but I don't think this is yet available for the Text
widget.
as for the original poster, the best way to solve this is probably to add
custom
mouse bindings for this widget. here's a start (needs a bit of tweaking,
but you
get the idea):

w.tag_config("mysel", background="blue", foreground="white")

def start(event):
index = w.index("@%d,%d" % (event.x, event.y))
w.mark_set("myanchor", index)

def drag(event):
index = w.index("@%d,%d" % (event.x, event.y))
w.tag_remove("mysel", 1.0, END)
w.tag_add("mysel", "myanchor", index)

def copy(event):
text = w.get("mysel.first", "mysel.last")
if text: add to clipboard

w.bind("<Button-1>", start)
w.bind("<B1-Motion>", drag)
w.bind("<Control-C>", copy)

</F>


Jul 18 '05 #4
In article <ma**************************************@python.o rg>,
"Fredrik Lundh" <fr*****@pythonware.com> wrote:
...
however, in recent versions, many Tk entry widgets supports both
state="disabled"
and state="readonly", but I don't think this is yet available for the Text
widget.

as for the original poster, the best way to solve this is probably to add
custom
mouse bindings for this widget. here's a start...


Glad to hear about the new state="readonly". Looking forward to that
making it into the Text widget. Meanwhile, here's the function I use. No
gurantees, but it seems to work for me. Any bug reports would be most
welcome.

-- Russell

def makeReadOnly(tkWdg):
"""Makes a Tk widget (typically an Entry or Text) read-only,
in the sense that the user cannot modify the text (but it can
still be set programmatically). The user can still select and copy
text
and key bindings for <<Copy>> and <<Select-All>> still work properly.

Inputs:
- tkWdg: a Tk widget
"""
def killEvent(evt):
return "break"

def doCopy(evt):
tkWdg.event_generate("<<Copy>>")

def doSelectAll(evt):
tkWdg.event_generate("<<Select-All>>")

# kill all events that can change the text,
# including all typing (even shortcuts for
# copy and select all)
tkWdg.bind("<<Cut>>", killEvent)
tkWdg.bind("<<Paste>>", killEvent)
tkWdg.bind("<<Paste-Selection>>", killEvent)
tkWdg.bind("<<Clear>>", killEvent)
tkWdg.bind("<Key>", killEvent)
# restore copy and select all
for evt in tkWdg.event_info("<<Copy>>"):
tkWdg.bind(evt, doCopy)
for evt in tkWdg.event_info("<<Select-All>>"):
tkWdg.bind(evt, doSelectAll)
Jul 18 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: black | last post by:
Howdy~ i am with Win2k and had built a window with Tkinter, it has 3 button on its topright corner as common window, but what i want is just one or tow of them. ie, is there any way i can...
1
by: Justin | last post by:
Hello, My problem is that I am trying to use commands to Cut/Copy/paste text from an active textbox this is because I am calling the commands from the MDIParent. Does anyone know how to allow...
6
by: XmlAdoNewbie | last post by:
Hi All, I would like to put a method for copy, cut and paste into my application and this seems to be easy enough except that it's not working the way i would like it to, I thought someone might...
13
by: John | last post by:
Hi How can I implement cut or copy or paste in code? Thanks Regards
3
by: Glen | last post by:
Is it possible to to detect a Tkinter top-level window being closed with the close icon/button (top right), for example to call a function before the window actually closes? Python 2.4 / Linux...
2
by: Sasho Popovski | last post by:
Is there elegant way to create Edit menu in MainMenu with standard Copy/Cut/Paste MenuItems which will work on the Application level. There ara Copy/Cut/Paste methods connected to the TextBox-es,...
0
by: Bob Greschke | last post by:
I have a program with many "forms" (Toplevel windows with entry fields). Sometimes when I .deiconify() and .lift() a form that is a child of another form, but that just got buried under other forms...
6
by: roopashree | last post by:
hi, currently I am able to cut,copy and paste images for only one image. Suppose I have 4 images-then I should group all the images so that I can cut/copy all 4 images and paste them. How...
16
by: questionit | last post by:
If you have many controls on a Tab Control and all of them have code written for them. Now if you want to move these controls from Tab Control to some other part of the form then the code for...
1
by: CSharpner | last post by:
Short Question: How do I support Cut/Paste to/from a .NET app and Windows Explorer? Full Text: I'm nearing the completion of a Remote File Management application. It looks and feels a lot like...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.