Bagaimana cara membuat wxListCtrl menggunakan implementasi macOS asli?

Saya mencoba agar wxListCtrl saya menggunakan implementasi asli di macOS, tetapi saya hanya mendapatkan implementasi generik.

Menurut wxWiki:

Dimulai dengan wxWidgets 2.8 (wxMac), wxListCtrl menggunakan implementasi asli untuk mode laporan, dan menggunakan implementasi umum untuk mode lainnya.

Saya telah menyetel wxListCtrl ke LC_REPORT, tetapi saya masih mendapatkan implementasi umum.

Apa yang saya lakukan salah?

(Saya menggunakan Python 3.8.2 di macOS 10.15.4 Catalina, dan diuji dengan wxPython 4.0.7 stabil dan snapshot build terbaru wxPython-4.1.0a1.dev4650+de25f309-cp38-cp38-macosx_10_9_x86_64.whl)


Contoh minimal

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import wx

class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 'Example')

        panel = wx.Panel(self, wx.ID_ANY)
        self.index = 0

        self.list_ctrl = wx.ListCtrl(panel, style=wx.LC_REPORT)
        self.list_ctrl.InsertColumn(0, 'Title')

        btn = wx.Button(panel, label='Add row')
        btn.Bind(wx.EVT_BUTTON, self.add_line)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)

    def add_line(self, event):
        line = "Row %s" % self.index
        self.list_ctrl.InsertItem(self.index, line)
        self.index += 1


if __name__ == '__main__':
    app = wx.App()
    frame = MyForm()
    frame.Show()
    app.MainLoop()

person sorbet    schedule 02.04.2020    source sumber


Jawaban (1)


Implementasi wxListCtrl asli pada Mac ternyata terlalu bermasalah sehingga dibatalkan di wx 3. Jika bisa, pertimbangkan untuk menggunakan wxDataViewCtrl yang asli pada Mac dan secara umum dapat digunakan, meskipun masih memiliki beberapa keterbatasan dibandingkan dengan versi generik karena kekhasan API asli.

person VZ.    schedule 02.04.2020