Я использую wx.TextDropTarget реализовать перетаскивание приложения, где пользователи могут перетащить некоторые текстовые строки из ListCtrl
виджета и поместите их в TextCtrl
виджетов. Одна из проблем, с которыми я не мог понять, как решить, заключается в том, что иногда текстовые строки, сброшенные в TextCtrl
, видят, что к ним добавляются случайные символы (см. Снимок экрана ниже). Эта проблема не возникает каждый раз - как вы можете видеть, «Восток от Эдема» отображается хорошо.Неожиданных символы прилагаемых в конце строки текста при использовании wx.TextDropTarget
Я на OSX 10.10.5 и используя WxPython 2.9.2.4-1. Я не уверен, что эта проблема может быть воспроизведена на других платформах. Ниже приведен пример кода.
import wx
from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin
class AutoWidthListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin):
def __init__(self, parent):
wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT)
ListCtrlAutoWidthMixin.__init__(self)
class TextDropTarget(wx.TextDropTarget):
def __init__(self, obj):
wx.TextDropTarget.__init__(self)
self.obj = obj
def OnDropText(self, x, y, text):
self.obj.WriteText(text)
def OnDragOver(self, x, y, d):
return wx.DragCopy
class MyApp(wx.Frame):
def __init__(self, parent, title):
super(MyApp, self).__init__(parent, style = wx.DEFAULT_FRAME_STYLE,
title=title, size=(500, 500))
self.Panel = wx.Panel(self, size = (-1, -1))
GridBagSizer = wx.GridBagSizer(5,5)
#ListCtrl widget
self.Source = AutoWidthListCtrl(self.Panel)
self.Source.Show()
self.Source.InsertColumn(0, 'Book Titles')
self.Source.InsertStringItem(0,'War and Peace')
self.Source.InsertStringItem(0,'East of Eden')
self.Source.InsertStringItem(0,'Pride and Prejudice')
GridBagSizer.Add(self.Source, pos = (0, 0), span = (6, 1),
flag = wx.EXPAND|wx.ALL, border = 15)
self.Panel.SetSizer(GridBagSizer)
#Label for each TextCtrl widget
AmericanNovel = wx.StaticText(self.Panel, label ="American Novel:")
EnglishNovel = wx.StaticText(self.Panel, label = "British Novel:")
RussianNovel = wx.StaticText(self.Panel, label = "Russian Novel:")
GridBagSizer.Add(AmericanNovel, pos = (0, 1), span = (1, 1),
flag = wx.TOP, border = 10)
GridBagSizer.Add(EnglishNovel, pos = (2, 1), span = (1, 1))
GridBagSizer.Add(RussianNovel, pos = (4, 1), span = (1, 1))
#TextCtrl widgets
self.Target1 = wx.TextCtrl(self.Panel, size = (240, -1),
style = wx.TE_READONLY)
self.Target2 = wx.TextCtrl(self.Panel, size = (240, -1),
style = wx.TE_READONLY)
self.Target3 = wx.TextCtrl(self.Panel, size = (240, -1),
style = wx.TE_READONLY)
GridBagSizer.Add(self.Target1, pos = (1, 1), span = (1, 1))
GridBagSizer.Add(self.Target2, pos = (3, 1), span = (1, 1))
GridBagSizer.Add(self.Target3, pos = (5, 1), span = (1, 1))
dt1 = TextDropTarget(self.Target1)
dt2 = TextDropTarget(self.Target2)
dt3 = TextDropTarget(self.Target3)
self.Target1.SetDropTarget(dt1)
self.Target2.SetDropTarget(dt2)
self.Target3.SetDropTarget(dt3)
self.Bind(wx.EVT_LIST_BEGIN_DRAG, self.OnDragInit)
GridBagSizer.AddGrowableCol(0)
GridBagSizer.AddGrowableCol(1)
def OnDragInit(self, evt):
text = self.Source.GetItemText(evt.GetIndex())
tdo = wx.TextDataObject(text)
tds = wx.DropSource(self.Source)
tds.SetData(tdo)
tds.DoDragDrop(True)
if __name__ == "__main__":
app = wx.App()
MainFrame = MyApp(None, title = "My App")
MainFrame.Show()
MainFrame.Centre()
app.MainLoop()
Любой указатель будет очень благодарен!
Вы уверены, что у вас нет какого-то китайского набора символов, установленного на вашем компьютере. Эти «бродячие» персонажи выглядят так, будто они забивают перевод. Просто мысль! –
Мой компьютер может отображать китайский язык, но Mac OS на английском языке, и я не установил ничего особенного для китайцев. Другими словами, мой компьютер может отображать китайский язык из коробки – Alex