簡體   English   中英

PYTHON - win32gui.DrawText 矩形偶數模式

[英]PYTHON - win32gui.DrawText rect even pattern

我的應用程序非常簡單。 它僅使用win32gui.DrawText在我的 Window 中顯示 12 個(文本)數據。 但是,我在定位文本時遇到問題,或者更准確地說是rect s。 我的rect總是變得不均勻,或者它們比預期的更短或更長。 但是我希望它們都是均勻的,我希望它們共享 Window 提供的空間。

我要存檔的是這個架構:

WINDOW 文本應用架構

還要注意在第一個rect中文本是如何左對齊的,而在第二個矩形中文本是如何右對齊的。 重復這個模式。

我是新手,我無法弄清楚如何讓矩形元組坐標以這種方式運行。

編輯:代碼(我刪除了不相關的代碼)

   thistuple2 = (145, 160, 0, 0)

   thistuple3 = (305, 60, 0, 0)
   thistuple4 = (305, 160, 20, 0)

   thistuple5 = (315, 60, 180, 0)
   thistuple6 = (315, 160, 180, 0)

   hDC, paintStruct = win32gui.BeginPaint(fenster)
   
   dpiScale = win32ui.GetDeviceCaps(hDC, win32con.LOGPIXELSX) / 60.0
   fontSize = 10
   lf = win32gui.LOGFONT()
   lf.lfFaceName = "Segoe UI"
   lf.lfHeight = int(round(dpiScale * fontSize))

   hf = win32gui.CreateFontIndirect(lf)
   win32gui.SelectObject(hDC, hf)
            
   win32gui.SetBkMode(hDC, win32con.TRANSPARENT)
   win32gui.SetTextColor(hDC,win32api.RGB(255,255,255))

   rect = win32gui.GetClientRect(fenster)
   win32gui.DrawText(
            hDC,
            "VLO ",
            -1,
            thistuple1,
            win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER | win32con.DT_RIGHT)


   rect = win32gui.GetClientRect(fenster)
   win32gui.DrawText(
            hDC,
            "DFH ",
            -1,
            thistuple2,
            win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER)

   rect = win32gui.GetClientRect(fenster)
   win32gui.DrawText(
            hDC,
            "130242",
            -1,
            thistuple3,
            win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER | win32con.DT_RIGHT)

   rect = win32gui.GetClientRect(fenster)
   win32gui.DrawText(
            hDC,
            "120",
            -1,
            thistuple4,
            win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER | win32con.DT_RIGHT)


   rect = win32gui.GetClientRect(fenster)
   win32gui.DrawText(
            hDC,
            "VHN ",
            -1,
            thistuple5,
            win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER)

   rect = win32gui.GetClientRect(fenster)
   win32gui.DrawText(
            hDC,
            "LOU ",
            -1,
            thistuple6,
            win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER)

   win32gui.EndPaint(fenster, paintStruct)

我知道這些只有 6 個項目。 我停止繪制剩余的那些,因為我對直角坐標感到頭疼。 同樣在最終產品中,文本不是 static,僅用於顯示目的。

編輯:我昨天設法通過給所有 rects 華麗的 bg 顏色並一遍又一遍地手動猜測 rect 坐標來自己存檔它,直到我設法將它們放在我想要的位置並且我也修復了 alignment。 由於我是 py 的新手,我不知道有 Qt 和它們的庫之類的東西,我將用它重做應用程序,因為它更容易動態更改 label 而不是每次在數據更改時使用 DrawText 重繪。

為了均勻,您需要Mapping Modes 和 Translations 通常,調用 function 序列就像這樣繪制自定義 Window 背景

    hdc = (HDC) wParam; 
    GetClientRect(hwnd, &rc); 
    SetMapMode(hdc, MM_ANISOTROPIC); 
    SetWindowExtEx(hdc, 100, 100, NULL); 
    SetViewportExtEx(hdc, rc.right, rc.bottom, NULL);
    //possible SetWindowOrgEx and SetViewportOrgEx following

坐標空間和變換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM