문제

WX.LC_REPORT 모드에서 WX.LISTCTRL 클래스를 사용하여 ListCtrLautowidthmixin으로 보강합니다.

문제는 사용자가 열 분배기 (자동 크기 조정 열로)를 두 번 클릭하면 열 너비가 내용 너비와 일치하도록 설정됩니다. 이것은 WX 라이브러리에 의해 수행되며 컨트롤이 비어있을 때 열을 몇 픽셀로 크기로 크게 크게 올립니다.

나는 전화를 시도했다

self.setcolumnwidth (colnumber, wx.list_autosize_useheader)

목록을 작성하는 동안 최소 허용 너비가 아니라 초기 열 너비를 설정합니다.

누구든지 열을 최소 폭을 설정하는 데 성공한 사람이 있습니까?

편집 : 잡기를 시도했습니다

 wx.EVT_LEFT_DCLICK 

성공하지 못했습니다. 이 이벤트는 사용자가 열 분배기를 두 번 클릭 할 때 생성되지 않습니다. 또한 시도했습니다

wx.EVT_LIST_COL_END_DRAG 

이 이벤트는 보통 두 번의 클릭으로 두 번 생성되지만 새 크기에 대한 정보를 검색하거나 드래그 앤 드롭에서 더블 클릭을 구별하는 방법을 알 수 없습니다. 누구든지 다른 아이디어가 있습니까?

도움이 되었습니까?

해결책 2

좋아, 약간의 투쟁 후에 나는 그것을 위해 일하는 해결 방법을 얻었다. 그것은 디자인의 관점에서 추악하지만 나에게 충분히 잘 작동합니다.

그것이 작동하는 방식입니다.

  1. 열의 초기 너비를 저장하십시오.

    self.SetColumnWidth(colNum, wx.LIST_AUTOSIZE_USEHEADER)
    
    self.__columnWidth[colNum] = self.GetColumnWidth(c)
    
  2. 업데이트 UI 이벤트에 대한 핸들러 등록.

    wx.EVT_UPDATE_UI(self, self.GetId(), self.onUpdateUI)
    
  3. 핸들러 기능을 작성하십시오.

    def onUpdateUI(self, evt):
        for colNum in xrange(0, self.GetColumnCount()-1):
            if self.GetColumnWidth(colNum) < self.__columnWidth[colNum]:
                self.SetColumnWidth(colNum, self.__columnWidth[colNum])
        evt.Skip()
    

그만큼 self.getColumnCount () -1 의도적이므로 마지막 열은 크기가 크지 않습니다. 나는 이것이 우아한 솔루션이 아니라는 것을 알고 있지만 나에게 충분히 잘 작동합니다. 디바이더를 두 번 클릭하여 열을 너무 작게 만들 수 없습니다 (사실 - 실제로 할 수 없습니다). 마지막 열은 마지막 열을 목록 제어 너비에 맞게 크기를 조정합니다.

그래도 누군가가 더 나은 솔루션을 알고 있다면 게시하십시오.

다른 팁

솔직히, 나는 사용을 위해 유리한 기본 WX.listctrl 사용을 중단했습니다. ObjectListView. 학습 곡선이 약간 있지만 많은 예가 있습니다. 이것 귀하의 질문에 관심이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top