2017-08-22 11 views
0

先日、私は驚いたことに、wxPythonパネルの静的テキストを選択/強調表示できないことを知りました。ユーザーがコンテンツをコピーできるようにする必要があります。wxPythonの静的テキスト選択方法の選択

StaticTextコンポーネントを選択できるようにフラグなどが見つかりませんでした。

import wx 
app = wx.App(False) 
frame = wx.Frame(None, wx.ID_ANY, "Hello, World!") 
panel = wx.Panel(frame) 
panel.SetBackgroundColour("#FFB6C1") 
st = wx.StaticText(panel, wx.ID_ANY, "Hello, World!") 
frame.Show(True) 
app.MainLoop() 

答えて

0

装っ
2. TextCtrlをクリックします。ここでgistから現在のバージョンでは、(SOこれを埋め込むのではなくコピーすることができたい)です:

import wx 
import wx.html 
import webbrowser 


class HtmlPopupTransientWindow(wx.PopupTransientWindow): 
    def __init__(self, parent, style, html_body_content, bgcolor, size): 
     wx.PopupTransientWindow.__init__(self, parent, style) 
     panel = wx.Panel(self) 
     panel.SetBackgroundColour(bgcolor) 

     html_window = self.HtmlWindow(panel, wx.ID_ANY, size=size) 
     html_window.SetPage('<body bgcolor="' + bgcolor + '">' + html_body_content + '</body>') 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(html_window, 0, wx.ALL, 5) 
     panel.SetSizer(sizer) 

     sizer.Fit(panel) 
     sizer.Fit(self) 
     self.Layout() 

    class HtmlWindow(wx.html.HtmlWindow): 
     def OnLinkClicked(self, link): 
      # get a hold of the PopupTransientWindow to close it 
      self.GetParent().GetParent().Dismiss() 
      webbrowser.open(link.GetHref()) 

参照https://frightanic.com/software-development/create-an-info-icon-with-wxpython/は更なる説明のために。

1

私はStaticText選択/コピー可能を作るための方法を見つけることができませんが、ここで問題を回避する2つのハックです。
1.マウスの右にクリップボードにコピー私は私のカスタムHTML対応のツールチップウィンドウを作成するための定住いくつかの実験の後StaticText

import wx 
class MyFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1) 
     self.panel = wx.Panel(self) 
     self.st = wx.StaticText(self.panel, wx.ID_ANY, "Hello, World! Copy me with right click",pos=(5,5)) 
     self.st.Bind(wx.wx.EVT_RIGHT_DOWN,self.ShowPopup) 
     self.tc = wx.TextCtrl(self.panel, wx.ID_ANY, "Paste here", pos=(5,30),size=(300,20)) 
     self.tc2 = wx.TextCtrl(self.panel, wx.ID_ANY,"TextCtrl masquerading as StaticText - Select me",style=wx.TE_READONLY|wx.NO_BORDER,pos=(5,60),size=(300,20)) 
     self.tc2.SetBackgroundColour(self.panel.GetBackgroundColour()) 
     self.Show() 

    def ShowPopup(self,event): 
     popmenu = wx.Menu() 
     popmenu.Append(1, "Copy this text to clipboard") 
     popmenu.Bind(wx.EVT_MENU, self.Copy) 
     self.panel.PopupMenu(popmenu) 
     popmenu.Destroy() 

    def Copy(self,event): 
     clipdata = wx.TextDataObject() 
     text = self.st.GetLabelText() 
     clipdata.SetText(text) 
     wx.TheClipboard.Open() 
     wx.TheClipboard.SetData(clipdata) 
     wx.TheClipboard.Close() 

app = wx.App() 
frame = MyFrame() 
app.MainLoop() 
+0

ありがとうございました。私は、 'StaticText'の代わりに' HtmlWindow'を使用することで、場合によっては回避策になることが分かりました。 –

+0

私は興味をそそられています。私は 'HtmlWindow'をLinux上で選択できるようにはできないようです。おそらく、あなたは自己答えるべきです。 –

+0

私は、a)誰かが代替案を提示していない場合、b)私はもう少し経験を積んでいます。私はまだそのコンポーネントがどこで使われているのか、どこにはないのか把握していません。 –

関連する問題