2017-08-22 21 views
0

有一天我發現,令我驚訝的是,wxPython面板上的靜態文本不可選/ highlightable。我需要這樣用戶才能複製內容。如何使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

幾個實驗我決定創建我的自定義支持HTML的提示窗口後。下面是來自gist當前版本(願意的話才能嵌入,而不是複製):

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.複製到剪貼板上點擊鼠標右鍵,
2. TextCtrl僞裝成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

謝謝羅爾夫。我發現在某些情況下使用'HtmlWindow'而不是'StaticText'可能是一種解決方法。 –

+0

我很好奇。我似乎無法獲得'HtmlWindow'來允許在Linux上進行選擇。也許你應該自我回答。 –

+0

我會考慮如果a)沒有人會提出替代方案,b)我已經獲得了更多的經驗。我還沒有弄清楚哪些組件可以在哪裏使用,哪些不可以。 –

相關問題