1802 lines
56 KiB
Plaintext
1802 lines
56 KiB
Plaintext
# ============================================================
|
||
# vqt6 — Viper 的 Qt6 绑定包
|
||
#
|
||
# 公共 Pythonic API(基于 C 桥接层)
|
||
# 用户用法:
|
||
# import vqt6
|
||
# app = vqt6.QApplication([])
|
||
# win = vqt6.QWidget()
|
||
# win.setWindowTitle("Hello")
|
||
# win.show()
|
||
# app.exec()
|
||
# ============================================================
|
||
|
||
import t
|
||
import stdlib
|
||
from stdint import *
|
||
from vqt6._types import *
|
||
from vqt6._qtcore import *
|
||
from vqt6._qtwidgets import *
|
||
from vqt6._qtgui import *
|
||
from vqt6._qtnetwork import *
|
||
|
||
|
||
# ============================================================
|
||
# 高级 API 类(Pythonic 包装,不透明指针)
|
||
# ============================================================
|
||
|
||
# ============================================================
|
||
# 模块级 helper:QWidget 基础操作(各控件类复用)
|
||
# ============================================================
|
||
def _w_show(ptr: t.CPtr):
|
||
vqt6_qwidget_show(ptr)
|
||
|
||
|
||
def _w_hide(ptr: t.CPtr):
|
||
vqt6_qwidget_hide(ptr)
|
||
|
||
|
||
def _w_close(ptr: t.CPtr) -> int:
|
||
return vqt6_qwidget_close(ptr)
|
||
|
||
|
||
def _w_set_geometry(ptr: t.CPtr, x: int, y: int, w: int, h: int):
|
||
vqt6_qwidget_set_geometry(ptr, x, y, w, h)
|
||
|
||
|
||
def _w_resize(ptr: t.CPtr, w: int, h: int):
|
||
vqt6_qwidget_resize(ptr, w, h)
|
||
|
||
|
||
def _w_move(ptr: t.CPtr, x: int, y: int):
|
||
vqt6_qwidget_move(ptr, x, y)
|
||
|
||
|
||
def _w_set_enabled(ptr: t.CPtr, enabled: int):
|
||
vqt6_qwidget_set_enabled(ptr, enabled)
|
||
|
||
|
||
def _w_set_visible(ptr: t.CPtr, visible: int):
|
||
vqt6_qwidget_set_visible(ptr, visible)
|
||
|
||
|
||
def _w_is_visible(ptr: t.CPtr) -> int:
|
||
return vqt6_qwidget_is_visible(ptr)
|
||
|
||
|
||
def _w_set_window_title(ptr: t.CPtr, title: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(title)
|
||
vqt6_qwidget_set_window_title(ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
|
||
def _w_set_tool_tip(ptr: t.CPtr, tip: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(tip)
|
||
vqt6_qwidget_set_tool_tip(ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
|
||
def _w_text_of(qstr: QtStringPtr) -> str:
|
||
"""QtStringPtr → Viper str(复制到 malloc 缓冲)"""
|
||
buf: bytes = stdlib.malloc(1024)
|
||
vqt6_qstring_to_utf8(qstr, buf, 1024)
|
||
s: str = buf
|
||
vqt6_qstring_free(qstr)
|
||
return s
|
||
|
||
|
||
# ============================================================
|
||
# 树状控件统计助手(返回 int,规避跨模块 FFI 返回指针)
|
||
# 叶子勾选态: 0=未选 1=半选 2=选中
|
||
# ============================================================
|
||
def qtree_checked_count(tw: QtTreeWidgetPtr) -> int:
|
||
"""统计被勾选的叶子节点数"""
|
||
n: int = 0
|
||
gi: int = 0
|
||
top_n: int = vqt6_qtreewidget_top_level_item_count(tw)
|
||
while gi < top_n:
|
||
g: QtTreeWidgetItemPtr = vqt6_qtreewidget_top_level_item(tw, gi)
|
||
ci: int = 0
|
||
cn: int = vqt6_qtreewidgetitem_child_count(g)
|
||
while ci < cn:
|
||
it: QtTreeWidgetItemPtr = vqt6_qtreewidgetitem_child(g, ci)
|
||
if vqt6_qtreewidgetitem_check_state(it) == 2:
|
||
n += 1
|
||
ci += 1
|
||
gi += 1
|
||
return n
|
||
|
||
|
||
def qtree_checked_size(tw: QtTreeWidgetPtr) -> int:
|
||
"""统计被勾选叶子节点的磁盘占用合计(MB)"""
|
||
mb: int = 0
|
||
gi: int = 0
|
||
top_n: int = vqt6_qtreewidget_top_level_item_count(tw)
|
||
while gi < top_n:
|
||
g: QtTreeWidgetItemPtr = vqt6_qtreewidget_top_level_item(tw, gi)
|
||
ci: int = 0
|
||
cn: int = vqt6_qtreewidgetitem_child_count(g)
|
||
while ci < cn:
|
||
it: QtTreeWidgetItemPtr = vqt6_qtreewidgetitem_child(g, ci)
|
||
if vqt6_qtreewidgetitem_check_state(it) == 2:
|
||
mb += vqt6_qtreewidgetitem_data_int(it)
|
||
ci += 1
|
||
gi += 1
|
||
return mb
|
||
|
||
|
||
def qtree_click_toggle(tw: QtTreeWidgetPtr):
|
||
"""点击带子节点的当前行 → 展开/折叠"""
|
||
cur: QtTreeWidgetItemPtr = vqt6_qtreewidget_current_item(tw)
|
||
if cur is None:
|
||
return
|
||
if vqt6_qtreewidgetitem_child_count(cur) > 0:
|
||
ex: int = vqt6_qtreewidgetitem_is_expanded(cur)
|
||
vqt6_qtreewidgetitem_set_expanded(cur, 1 - ex)
|
||
|
||
|
||
@t.NoVTable
|
||
class QApplication:
|
||
"""QApplication 包装(不透明指针)"""
|
||
_ptr: QtAppPtr
|
||
|
||
def __init__(self, argv: list[str] | t.CPtr):
|
||
# 把 argv 转换为 argc/argv 数组
|
||
argc: t.CInt = 1
|
||
# Viper 端 argv 是 c_char_p 指针数组
|
||
# 这里仅传空 argv,避免 C ABI 复杂性
|
||
argv_ptr: t.CPtr = t.CPtr(0)
|
||
self._ptr = vqt6_qapplication_create(argc, argv_ptr)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QApplication")
|
||
|
||
def exec(self) -> int:
|
||
return vqt6_qapplication_exec(self._ptr)
|
||
|
||
def quit(self):
|
||
vqt6_qapplication_quit(self._ptr)
|
||
|
||
def exit(self, code: int):
|
||
vqt6_qapplication_exit(self._ptr, code)
|
||
|
||
def process_events(self):
|
||
vqt6_qapplication_process_events(self._ptr)
|
||
|
||
def desktop_width(self) -> int:
|
||
return vqt6_qapplication_desktop_width(self._ptr)
|
||
|
||
def desktop_height(self) -> int:
|
||
return vqt6_qapplication_desktop_height(self._ptr)
|
||
|
||
|
||
@t.NoVTable
|
||
class QWidget:
|
||
"""QWidget 包装"""
|
||
_ptr: QtWidgetPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qwidget_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qwidget_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QWidget")
|
||
|
||
def show(self):
|
||
vqt6_qwidget_show(self._ptr)
|
||
|
||
def hide(self):
|
||
vqt6_qwidget_hide(self._ptr)
|
||
|
||
def close(self) -> int:
|
||
return vqt6_qwidget_close(self._ptr)
|
||
|
||
def setWindowTitle(self, title: str):
|
||
title_qs: QtStringPtr = vqt6_qstring_create(title)
|
||
vqt6_qwidget_set_window_title(self._ptr, title_qs)
|
||
vqt6_qstring_free(title_qs)
|
||
|
||
def windowTitle(self) -> str:
|
||
result: QtStringPtr = vqt6_qwidget_window_title(self._ptr)
|
||
buf: bytes = stdlib.malloc(1024)
|
||
vqt6_qstring_to_utf8(result, buf, 1024)
|
||
s: str = buf
|
||
vqt6_qstring_free(result)
|
||
return s
|
||
|
||
def resize(self, w: int, h: int):
|
||
vqt6_qwidget_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
vqt6_qwidget_move(self._ptr, x, y)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
vqt6_qwidget_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
vqt6_qwidget_set_enabled(self._ptr, enabled)
|
||
|
||
def setVisible(self, visible: int):
|
||
vqt6_qwidget_set_visible(self._ptr, visible)
|
||
|
||
def isVisible(self) -> int:
|
||
return vqt6_qwidget_is_visible(self._ptr)
|
||
|
||
def setToolTip(self, tip: str):
|
||
tip_qs: QtStringPtr = vqt6_qstring_create(tip)
|
||
vqt6_qwidget_set_tool_tip(self._ptr, tip_qs)
|
||
vqt6_qstring_free(tip_qs)
|
||
|
||
def setStyleSheet(self, qss: str):
|
||
vqt6_qwidget_set_stylesheet_utf8(self._ptr, qss)
|
||
|
||
|
||
@t.NoVTable
|
||
class QLabel:
|
||
"""QLabel 包装"""
|
||
_ptr: QtLabelPtr
|
||
|
||
def __init__(self, text: str = "", parent: "QWidget | None" = None):
|
||
text_qs: QtStringPtr = vqt6_qstring_create(text)
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qlabel_create_with_text_parent(text_qs, parent._ptr)
|
||
elif text_qs is not None:
|
||
self._ptr = vqt6_qlabel_create_with_text(text_qs)
|
||
else:
|
||
self._ptr = vqt6_qlabel_create()
|
||
vqt6_qstring_free(text_qs)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QLabel")
|
||
|
||
def setText(self, text: str):
|
||
text_qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qlabel_set_text(self._ptr, text_qs)
|
||
vqt6_qstring_free(text_qs)
|
||
|
||
def text(self) -> str:
|
||
result: QtStringPtr = vqt6_qlabel_text(self._ptr)
|
||
buf: bytes = stdlib.malloc(1024)
|
||
vqt6_qstring_to_utf8(result, buf, 1024)
|
||
s: str = buf
|
||
vqt6_qstring_free(result)
|
||
return s
|
||
|
||
def setAlignment(self, alignment: int):
|
||
vqt6_qlabel_set_alignment(self._ptr, alignment)
|
||
|
||
def setStyleSheet(self, qss: str):
|
||
vqt6_qwidget_set_stylesheet_utf8(self._ptr, qss)
|
||
|
||
|
||
@t.NoVTable
|
||
class QPushButton:
|
||
"""QPushButton 包装"""
|
||
_ptr: QtPushButtonPtr
|
||
|
||
def __init__(self, text: str = "", parent: "QWidget | None" = None):
|
||
text_qs: QtStringPtr = vqt6_qstring_create(text)
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qpushbutton_create_with_text_parent(text_qs, parent._ptr)
|
||
elif text_qs is not None:
|
||
self._ptr = vqt6_qpushbutton_create_with_text(text_qs)
|
||
else:
|
||
self._ptr = vqt6_qpushbutton_create()
|
||
vqt6_qstring_free(text_qs)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QPushButton")
|
||
|
||
def setText(self, text: str):
|
||
text_qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qpushbutton_set_text(self._ptr, text_qs)
|
||
vqt6_qstring_free(text_qs)
|
||
|
||
def text(self) -> str:
|
||
result: QtStringPtr = vqt6_qpushbutton_text(self._ptr)
|
||
buf: bytes = stdlib.malloc(1024)
|
||
vqt6_qstring_to_utf8(result, buf, 1024)
|
||
s: str = buf
|
||
vqt6_qstring_free(result)
|
||
return s
|
||
|
||
def click(self):
|
||
vqt6_qpushbutton_click(self._ptr)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
vqt6_qwidget_set_enabled(self._ptr, enabled)
|
||
|
||
def setCheckable(self, checkable: int):
|
||
vqt6_qpushbutton_set_checkable(self._ptr, checkable)
|
||
|
||
def isCheckable(self) -> int:
|
||
return vqt6_qpushbutton_is_checkable(self._ptr)
|
||
|
||
def setChecked(self, checked: int):
|
||
vqt6_qpushbutton_set_checked(self._ptr, checked)
|
||
|
||
def isChecked(self) -> int:
|
||
return vqt6_qpushbutton_is_checked(self._ptr)
|
||
|
||
def setFlat(self, flat: int):
|
||
vqt6_qpushbutton_set_flat(self._ptr, flat)
|
||
|
||
# 回调(cb 传 Viper 模块级函数,签名 def cb(slot_id: int, data: t.CPtr))
|
||
def clicked(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qpushbutton_connect_clicked(self._ptr, cb, data)
|
||
|
||
def toggled(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qpushbutton_connect_toggled(self._ptr, cb, data)
|
||
|
||
|
||
# ============================================================
|
||
# 窗口:QMainWindow / QDialog
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QMainWindow:
|
||
"""QMainWindow 包装"""
|
||
_ptr: QtMainWindowPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qmainwindow_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qmainwindow_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QMainWindow")
|
||
|
||
def setCentralWidget(self, w: t.CPtr):
|
||
vqt6_qmainwindow_set_central_widget(self._ptr, w)
|
||
|
||
def menuBar(self) -> "QMenuBar":
|
||
mb_ptr: QtMenuBarPtr = vqt6_qmainwindow_menu_bar(self._ptr)
|
||
mb = QMenuBar()
|
||
mb._ptr = mb_ptr
|
||
return mb
|
||
|
||
def setMenuBar(self, mb: t.CPtr):
|
||
vqt6_qmainwindow_set_menu_bar(self._ptr, mb)
|
||
|
||
def statusBar(self) -> "QStatusBar":
|
||
sb_ptr: QtStatusBarPtr = vqt6_qmainwindow_status_bar(self._ptr)
|
||
sb = QStatusBar()
|
||
sb._ptr = sb_ptr
|
||
return sb
|
||
|
||
def addToolBar(self, tb: t.CPtr):
|
||
vqt6_qmainwindow_add_tool_bar(self._ptr, tb)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def close(self) -> int:
|
||
return _w_close(self._ptr)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def setWindowTitle(self, title: str):
|
||
_w_set_window_title(self._ptr, title)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
def setToolTip(self, tip: str):
|
||
_w_set_tool_tip(self._ptr, tip)
|
||
|
||
|
||
@t.NoVTable
|
||
class QDialog:
|
||
"""QDialog 包装"""
|
||
_ptr: QtDialogPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qdialog_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qdialog_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QDialog")
|
||
|
||
def exec(self) -> int:
|
||
return vqt6_qdialog_exec(self._ptr)
|
||
|
||
def accept(self):
|
||
vqt6_qdialog_accept(self._ptr)
|
||
|
||
def reject(self):
|
||
vqt6_qdialog_reject(self._ptr)
|
||
|
||
def setModal(self, modal: int):
|
||
vqt6_qdialog_set_modal(self._ptr, modal)
|
||
|
||
def isModal(self) -> int:
|
||
return vqt6_qdialog_is_modal(self._ptr)
|
||
|
||
def setResult(self, result: int):
|
||
vqt6_qdialog_set_result(self._ptr, result)
|
||
|
||
def result(self) -> int:
|
||
return vqt6_qdialog_result(self._ptr)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def close(self) -> int:
|
||
return _w_close(self._ptr)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def setWindowTitle(self, title: str):
|
||
_w_set_window_title(self._ptr, title)
|
||
|
||
|
||
# ============================================================
|
||
# 输入控件:QLineEdit / QCheckBox / QRadioButton
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QLineEdit:
|
||
"""QLineEdit 包装"""
|
||
_ptr: QtLineEditPtr
|
||
|
||
def __init__(self, text: str = "", parent: "QWidget | None" = None):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qlineedit_create_with_text_parent(qs, parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qlineedit_create_with_text(qs)
|
||
vqt6_qstring_free(qs)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QLineEdit")
|
||
|
||
def setText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qlineedit_set_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def text(self) -> str:
|
||
return _w_text_of(vqt6_qlineedit_text(self._ptr))
|
||
|
||
def setPlaceholderText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qlineedit_set_placeholder_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def setReadOnly(self, ro: int):
|
||
vqt6_qlineedit_set_read_only(self._ptr, ro)
|
||
|
||
def isReadOnly(self) -> int:
|
||
return vqt6_qlineedit_is_read_only(self._ptr)
|
||
|
||
def setMaxLength(self, max_len: int):
|
||
vqt6_qlineedit_set_max_length(self._ptr, max_len)
|
||
|
||
def selectAll(self):
|
||
vqt6_qlineedit_select_all(self._ptr)
|
||
|
||
def clear(self):
|
||
vqt6_qlineedit_clear(self._ptr)
|
||
|
||
def textChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qlineedit_connect_text_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QCheckBox:
|
||
"""QCheckBox 包装"""
|
||
_ptr: QtCheckBoxPtr
|
||
|
||
def __init__(self, text: str = "", parent: "QWidget | None" = None):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qcheckbox_create_with_text_parent(qs, parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qcheckbox_create_with_text(qs)
|
||
vqt6_qstring_free(qs)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QCheckBox")
|
||
|
||
def setText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qcheckbox_set_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def text(self) -> str:
|
||
return _w_text_of(vqt6_qcheckbox_text(self._ptr))
|
||
|
||
def setChecked(self, checked: int):
|
||
vqt6_qcheckbox_set_checked(self._ptr, checked)
|
||
|
||
def isChecked(self) -> int:
|
||
return vqt6_qcheckbox_is_checked(self._ptr)
|
||
|
||
def setTristate(self, tristate: int):
|
||
vqt6_qcheckbox_set_tristate(self._ptr, tristate)
|
||
|
||
def isTristate(self) -> int:
|
||
return vqt6_qcheckbox_is_tristate(self._ptr)
|
||
|
||
def toggled(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qcheckbox_connect_toggled(self._ptr, cb, data)
|
||
|
||
def stateChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qcheckbox_connect_state_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QRadioButton:
|
||
"""QRadioButton 包装"""
|
||
_ptr: QtRadioButtonPtr
|
||
|
||
def __init__(self, text: str = "", parent: "QWidget | None" = None):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qradiobutton_create_with_text_parent(qs, parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qradiobutton_create_with_text(qs)
|
||
vqt6_qstring_free(qs)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QRadioButton")
|
||
|
||
def setText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qradiobutton_set_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def text(self) -> str:
|
||
return _w_text_of(vqt6_qradiobutton_text(self._ptr))
|
||
|
||
def setChecked(self, checked: int):
|
||
vqt6_qradiobutton_set_checked(self._ptr, checked)
|
||
|
||
def isChecked(self) -> int:
|
||
return vqt6_qradiobutton_is_checked(self._ptr)
|
||
|
||
def toggled(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qradiobutton_connect_toggled(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
# ============================================================
|
||
# 选择控件:QComboBox / QSlider / QSpinBox / QProgressBar
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QComboBox:
|
||
"""QComboBox 包装"""
|
||
_ptr: QtComboBoxPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qcombobox_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qcombobox_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QComboBox")
|
||
|
||
def addItem(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qcombobox_add_item(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def insertItem(self, index: int, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qcombobox_insert_item(self._ptr, index, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def removeItem(self, index: int):
|
||
vqt6_qcombobox_remove_item(self._ptr, index)
|
||
|
||
def clear(self):
|
||
vqt6_qcombobox_clear(self._ptr)
|
||
|
||
def count(self) -> int:
|
||
return vqt6_qcombobox_count(self._ptr)
|
||
|
||
def currentIndex(self) -> int:
|
||
return vqt6_qcombobox_current_index(self._ptr)
|
||
|
||
def setCurrentIndex(self, index: int):
|
||
vqt6_qcombobox_set_current_index(self._ptr, index)
|
||
|
||
def currentText(self) -> str:
|
||
return _w_text_of(vqt6_qcombobox_current_text(self._ptr))
|
||
|
||
def itemText(self, index: int) -> str:
|
||
return _w_text_of(vqt6_qcombobox_item_text(self._ptr, index))
|
||
|
||
def setEditable(self, editable: int):
|
||
vqt6_qcombobox_set_editable(self._ptr, editable)
|
||
|
||
def isEditable(self) -> int:
|
||
return vqt6_qcombobox_is_editable(self._ptr)
|
||
|
||
def currentIndexChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qcombobox_connect_current_index_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QSlider:
|
||
"""QSlider 包装"""
|
||
_ptr: QtSliderPtr
|
||
|
||
def __init__(self, orientation: int = QT_HORIZONTAL, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qslider_create_with_orientation_parent(orientation, parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qslider_create_with_orientation(orientation)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QSlider")
|
||
|
||
def setValue(self, value: int):
|
||
vqt6_qslider_set_value(self._ptr, value)
|
||
|
||
def value(self) -> int:
|
||
return vqt6_qslider_value(self._ptr)
|
||
|
||
def setMinimum(self, min_val: int):
|
||
vqt6_qslider_set_minimum(self._ptr, min_val)
|
||
|
||
def setMaximum(self, max_val: int):
|
||
vqt6_qslider_set_maximum(self._ptr, max_val)
|
||
|
||
def setRange(self, min_val: int, max_val: int):
|
||
vqt6_qslider_set_range(self._ptr, min_val, max_val)
|
||
|
||
def setOrientation(self, orientation: int):
|
||
vqt6_qslider_set_orientation(self._ptr, orientation)
|
||
|
||
def orientation(self) -> int:
|
||
return vqt6_qslider_orientation(self._ptr)
|
||
|
||
def valueChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qslider_connect_value_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QSpinBox:
|
||
"""QSpinBox 包装"""
|
||
_ptr: QtSpinBoxPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qspinbox_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qspinbox_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QSpinBox")
|
||
|
||
def value(self) -> int:
|
||
return vqt6_qspinbox_value(self._ptr)
|
||
|
||
def setValue(self, value: int):
|
||
vqt6_qspinbox_set_value(self._ptr, value)
|
||
|
||
def setMinimum(self, min_val: int):
|
||
vqt6_qspinbox_set_minimum(self._ptr, min_val)
|
||
|
||
def setMaximum(self, max_val: int):
|
||
vqt6_qspinbox_set_maximum(self._ptr, max_val)
|
||
|
||
def setRange(self, min_val: int, max_val: int):
|
||
vqt6_qspinbox_set_range(self._ptr, min_val, max_val)
|
||
|
||
def minimum(self) -> int:
|
||
return vqt6_qspinbox_minimum(self._ptr)
|
||
|
||
def maximum(self) -> int:
|
||
return vqt6_qspinbox_maximum(self._ptr)
|
||
|
||
def setPrefix(self, prefix: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(prefix)
|
||
vqt6_qspinbox_set_prefix(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def setSuffix(self, suffix: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(suffix)
|
||
vqt6_qspinbox_set_suffix(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def valueChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qspinbox_connect_value_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QProgressBar:
|
||
"""QProgressBar 包装"""
|
||
_ptr: QtProgressBarPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qprogressbar_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qprogressbar_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QProgressBar")
|
||
|
||
def setValue(self, value: int):
|
||
vqt6_qprogressbar_set_value(self._ptr, value)
|
||
|
||
def value(self) -> int:
|
||
return vqt6_qprogressbar_value(self._ptr)
|
||
|
||
def setRange(self, min_val: int, max_val: int):
|
||
vqt6_qprogressbar_set_range(self._ptr, min_val, max_val)
|
||
|
||
def setMinimum(self, min_val: int):
|
||
vqt6_qprogressbar_set_minimum(self._ptr, min_val)
|
||
|
||
def setMaximum(self, max_val: int):
|
||
vqt6_qprogressbar_set_maximum(self._ptr, max_val)
|
||
|
||
def setFormat(self, format_str: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(format_str)
|
||
vqt6_qprogressbar_set_format(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def setTextVisible(self, visible: int):
|
||
vqt6_qprogressbar_set_text_visible(self._ptr, visible)
|
||
|
||
def valueChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qprogressbar_connect_value_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
# ============================================================
|
||
# 文本:QTextEdit / QPlainTextEdit
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QTextEdit:
|
||
"""QTextEdit 包装"""
|
||
_ptr: QtTextEditPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qtextedit_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qtextedit_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QTextEdit")
|
||
|
||
def setPlainText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qtextedit_set_plain_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def toPlainText(self) -> str:
|
||
return _w_text_of(vqt6_qtextedit_to_plain_text(self._ptr))
|
||
|
||
def setHtml(self, html: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(html)
|
||
vqt6_qtextedit_set_html(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def append(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qtextedit_append(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def clear(self):
|
||
vqt6_qtextedit_clear(self._ptr)
|
||
|
||
def setReadOnly(self, ro: int):
|
||
vqt6_qtextedit_set_read_only(self._ptr, ro)
|
||
|
||
def isReadOnly(self) -> int:
|
||
return vqt6_qtextedit_is_read_only(self._ptr)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QPlainTextEdit:
|
||
"""QPlainTextEdit 包装"""
|
||
_ptr: QtPlainTextEditPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qplaintextedit_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qplaintextedit_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QPlainTextEdit")
|
||
|
||
def setPlainText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qplaintextedit_set_plain_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def toPlainText(self) -> str:
|
||
return _w_text_of(vqt6_qplaintextedit_to_plain_text(self._ptr))
|
||
|
||
def append(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qplaintextedit_append(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def clear(self):
|
||
vqt6_qplaintextedit_clear(self._ptr)
|
||
|
||
def setReadOnly(self, ro: int):
|
||
vqt6_qplaintextedit_set_read_only(self._ptr, ro)
|
||
|
||
def lineCount(self) -> int:
|
||
return vqt6_qplaintextedit_line_count(self._ptr)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
# ============================================================
|
||
# 列表:QListWidget / QTabWidget / QStackedWidget
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QListWidget:
|
||
"""QListWidget 包装"""
|
||
_ptr: QtListWidgetPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qlistwidget_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qlistwidget_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QListWidget")
|
||
|
||
def addItem(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qlistwidget_add_item(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def insertItem(self, row: int, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qlistwidget_insert_item(self._ptr, row, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def clear(self):
|
||
vqt6_qlistwidget_clear(self._ptr)
|
||
|
||
def count(self) -> int:
|
||
return vqt6_qlistwidget_count(self._ptr)
|
||
|
||
def currentRow(self) -> int:
|
||
return vqt6_qlistwidget_current_row(self._ptr)
|
||
|
||
def setCurrentRow(self, row: int):
|
||
vqt6_qlistwidget_set_current_row(self._ptr, row)
|
||
|
||
def currentItemText(self) -> str:
|
||
return _w_text_of(vqt6_qlistwidget_current_item_text(self._ptr))
|
||
|
||
def itemText(self, row: int) -> str:
|
||
return _w_text_of(vqt6_qlistwidget_item_text(self._ptr, row))
|
||
|
||
def setItemText(self, row: int, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qlistwidget_set_item_text(self._ptr, row, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def currentRowChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qlistwidget_connect_current_row_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QTreeWidgetItem:
|
||
"""QTreeWidgetItem 包装(树节点,勾选态 0=未选 2=选中)"""
|
||
_ptr: QtTreeWidgetItemPtr
|
||
|
||
def __init__(self, text: str = ""):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
self._ptr = vqt6_qtreewidgetitem_create(qs)
|
||
vqt6_qstring_free(qs)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QTreeWidgetItem")
|
||
|
||
def setText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qtreewidgetitem_set_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def text(self) -> str:
|
||
return _w_text_of(vqt6_qtreewidgetitem_text(self._ptr))
|
||
|
||
def addChild(self, child: "QTreeWidgetItem"):
|
||
vqt6_qtreewidgetitem_add_child(self._ptr, child._ptr)
|
||
|
||
def childCount(self) -> int:
|
||
return vqt6_qtreewidgetitem_child_count(self._ptr)
|
||
|
||
def child(self, index: int) -> "QTreeWidgetItem":
|
||
it = QTreeWidgetItem()
|
||
it._ptr = vqt6_qtreewidgetitem_child(self._ptr, index)
|
||
return it
|
||
|
||
def setCheckable(self, checkable: int):
|
||
vqt6_qtreewidgetitem_set_checkable(self._ptr, checkable)
|
||
|
||
def setChecked(self, checked: int):
|
||
if checked != 0:
|
||
vqt6_qtreewidgetitem_set_check_state(self._ptr, 2)
|
||
else:
|
||
vqt6_qtreewidgetitem_set_check_state(self._ptr, 0)
|
||
|
||
def isChecked(self) -> int:
|
||
return vqt6_qtreewidgetitem_check_state(self._ptr)
|
||
|
||
def setSize(self, mb: int):
|
||
"""把磁盘占用(MB)存到节点 UserRole(统计用)"""
|
||
vqt6_qtreewidgetitem_set_data_int(self._ptr, mb)
|
||
|
||
def setExpanded(self, expanded: int):
|
||
vqt6_qtreewidgetitem_set_expanded(self._ptr, expanded)
|
||
|
||
def isExpanded(self) -> int:
|
||
return vqt6_qtreewidgetitem_is_expanded(self._ptr)
|
||
|
||
|
||
@t.NoVTable
|
||
class QTreeWidget:
|
||
"""QTreeWidget 包装"""
|
||
_ptr: QtTreeWidgetPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qtreewidget_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qtreewidget_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QTreeWidget")
|
||
|
||
def addTopLevelItem(self, item: "QTreeWidgetItem"):
|
||
vqt6_qtreewidget_add_top_level_item(self._ptr, item._ptr)
|
||
|
||
def insertTopLevelItem(self, index: int, item: "QTreeWidgetItem"):
|
||
vqt6_qtreewidget_insert_top_level_item(self._ptr, index, item._ptr)
|
||
|
||
def topLevelItemCount(self) -> int:
|
||
return vqt6_qtreewidget_top_level_item_count(self._ptr)
|
||
|
||
def topLevelItem(self, index: int) -> "QTreeWidgetItem":
|
||
it = QTreeWidgetItem()
|
||
it._ptr = vqt6_qtreewidget_top_level_item(self._ptr, index)
|
||
return it
|
||
|
||
def currentItem(self) -> "QTreeWidgetItem":
|
||
it = QTreeWidgetItem()
|
||
it._ptr = vqt6_qtreewidget_current_item(self._ptr)
|
||
return it
|
||
|
||
def expandAll(self):
|
||
vqt6_qtreewidget_expand_all(self._ptr)
|
||
|
||
def collapseAll(self):
|
||
vqt6_qtreewidget_collapse_all(self._ptr)
|
||
|
||
def setHeaderHidden(self, hidden: int):
|
||
vqt6_qtreewidget_set_header_hidden(self._ptr, hidden)
|
||
|
||
def setColumnCount(self, count: int):
|
||
vqt6_qtreewidget_set_column_count(self._ptr, count)
|
||
|
||
def setItemExpanded(self, item: "QTreeWidgetItem", expanded: int):
|
||
vqt6_qtreewidget_set_item_expanded(self._ptr, item._ptr, expanded)
|
||
|
||
def itemChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qtreewidget_connect_item_changed(self._ptr, cb, data)
|
||
|
||
def itemClicked(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qtreewidget_connect_item_clicked(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QTabWidget:
|
||
"""QTabWidget 包装"""
|
||
_ptr: QtTabWidgetPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qtabwidget_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qtabwidget_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QTabWidget")
|
||
|
||
def addTab(self, w: t.CPtr, label: str) -> int:
|
||
qs: QtStringPtr = vqt6_qstring_create(label)
|
||
idx: int = vqt6_qtabwidget_add_tab(self._ptr, w, qs)
|
||
vqt6_qstring_free(qs)
|
||
return idx
|
||
|
||
def removeTab(self, index: int):
|
||
vqt6_qtabwidget_remove_tab(self._ptr, index)
|
||
|
||
def count(self) -> int:
|
||
return vqt6_qtabwidget_count(self._ptr)
|
||
|
||
def currentIndex(self) -> int:
|
||
return vqt6_qtabwidget_current_index(self._ptr)
|
||
|
||
def setCurrentIndex(self, index: int):
|
||
vqt6_qtabwidget_set_current_index(self._ptr, index)
|
||
|
||
def tabText(self, index: int) -> str:
|
||
return _w_text_of(vqt6_qtabwidget_tab_text(self._ptr, index))
|
||
|
||
def setTabText(self, index: int, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qtabwidget_set_tab_text(self._ptr, index, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def currentChanged(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qtabwidget_connect_current_changed(self._ptr, cb, data)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
@t.NoVTable
|
||
class QStackedWidget:
|
||
"""QStackedWidget 包装"""
|
||
_ptr: QtStackedWidgetPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qstackedwidget_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qstackedwidget_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QStackedWidget")
|
||
|
||
def addWidget(self, w: t.CPtr) -> int:
|
||
return vqt6_qstackedwidget_add_widget(self._ptr, w)
|
||
|
||
def removeWidget(self, w: t.CPtr):
|
||
vqt6_qstackedwidget_remove_widget(self._ptr, w)
|
||
|
||
def count(self) -> int:
|
||
return vqt6_qstackedwidget_count(self._ptr)
|
||
|
||
def currentIndex(self) -> int:
|
||
return vqt6_qstackedwidget_current_index(self._ptr)
|
||
|
||
def setCurrentIndex(self, index: int):
|
||
vqt6_qstackedwidget_set_current_index(self._ptr, index)
|
||
|
||
def currentWidget(self) -> t.CPtr:
|
||
return vqt6_qstackedwidget_current_widget(self._ptr)
|
||
|
||
def show(self):
|
||
_w_show(self._ptr)
|
||
|
||
def hide(self):
|
||
_w_hide(self._ptr)
|
||
|
||
def setGeometry(self, x: int, y: int, w: int, h: int):
|
||
_w_set_geometry(self._ptr, x, y, w, h)
|
||
|
||
def resize(self, w: int, h: int):
|
||
_w_resize(self._ptr, w, h)
|
||
|
||
def move(self, x: int, y: int):
|
||
_w_move(self._ptr, x, y)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
_w_set_enabled(self._ptr, enabled)
|
||
|
||
|
||
# ============================================================
|
||
# 布局:QHBoxLayout / QVBoxLayout / QGridLayout
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QHBoxLayout:
|
||
"""QHBoxLayout 包装(addWidget 传控件 ._ptr)"""
|
||
_ptr: QtBoxLayoutPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qhboxlayout_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qhboxlayout_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QHBoxLayout")
|
||
|
||
def addWidget(self, widget: t.CPtr):
|
||
vqt6_qlayout_add_widget(self._ptr, widget)
|
||
|
||
def removeWidget(self, widget: t.CPtr):
|
||
vqt6_qlayout_remove_widget(self._ptr, widget)
|
||
|
||
def addLayout(self, child: t.CPtr):
|
||
vqt6_qhboxlayout_add_layout(self._ptr, child)
|
||
|
||
def addStretch(self, stretch: int):
|
||
vqt6_qhboxlayout_add_stretch(self._ptr, stretch)
|
||
|
||
def addSpacing(self, size: int):
|
||
vqt6_qhboxlayout_add_spacing(self._ptr, size)
|
||
|
||
def setSpacing(self, spacing: int):
|
||
vqt6_qlayout_set_spacing(self._ptr, spacing)
|
||
|
||
def setContentsMargins(self, left: int, top: int, right: int, bottom: int):
|
||
vqt6_qlayout_set_contents_margins(self._ptr, left, top, right, bottom)
|
||
|
||
|
||
@t.NoVTable
|
||
class QVBoxLayout:
|
||
"""QVBoxLayout 包装(addWidget 传控件 ._ptr)"""
|
||
_ptr: QtBoxLayoutPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qvboxlayout_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qvboxlayout_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QVBoxLayout")
|
||
|
||
def addWidget(self, widget: t.CPtr):
|
||
vqt6_qlayout_add_widget(self._ptr, widget)
|
||
|
||
def removeWidget(self, widget: t.CPtr):
|
||
vqt6_qlayout_remove_widget(self._ptr, widget)
|
||
|
||
def addLayout(self, child: t.CPtr):
|
||
vqt6_qvboxlayout_add_layout(self._ptr, child)
|
||
|
||
def addStretch(self, stretch: int):
|
||
vqt6_qvboxlayout_add_stretch(self._ptr, stretch)
|
||
|
||
def addSpacing(self, size: int):
|
||
vqt6_qvboxlayout_add_spacing(self._ptr, size)
|
||
|
||
def setSpacing(self, spacing: int):
|
||
vqt6_qlayout_set_spacing(self._ptr, spacing)
|
||
|
||
def setContentsMargins(self, left: int, top: int, right: int, bottom: int):
|
||
vqt6_qlayout_set_contents_margins(self._ptr, left, top, right, bottom)
|
||
|
||
|
||
@t.NoVTable
|
||
class QGridLayout:
|
||
"""QGridLayout 包装(addWidget 传控件 ._ptr)"""
|
||
_ptr: QtGridLayoutPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qgridlayout_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qgridlayout_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QGridLayout")
|
||
|
||
def addWidget(self, widget: t.CPtr, row: int, col: int):
|
||
vqt6_qgridlayout_add_widget(self._ptr, widget, row, col)
|
||
|
||
def addWidgetWithSpan(self, widget: t.CPtr, row: int, col: int, row_span: int, col_span: int):
|
||
vqt6_qgridlayout_add_widget_with_span(self._ptr, widget, row, col, row_span, col_span)
|
||
|
||
def setSpacing(self, spacing: int):
|
||
vqt6_qlayout_set_spacing(self._ptr, spacing)
|
||
|
||
def setContentsMargins(self, left: int, top: int, right: int, bottom: int):
|
||
vqt6_qlayout_set_contents_margins(self._ptr, left, top, right, bottom)
|
||
|
||
|
||
# ============================================================
|
||
# 对话框:QMessageBox / QFileDialog(静态方法)
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QMessageBox:
|
||
"""QMessageBox 静态对话框"""
|
||
_ptr: QtMessageBoxPtr
|
||
|
||
@staticmethod
|
||
def information(parent: "QWidget | None", title: str, text: str, buttons: int = QT_OK) -> int:
|
||
qs_title: QtStringPtr = vqt6_qstring_create(title)
|
||
qs_text: QtStringPtr = vqt6_qstring_create(text)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
r: int = vqt6_qmessagebox_information(parent_ptr, qs_title, qs_text, buttons)
|
||
vqt6_qstring_free(qs_title)
|
||
vqt6_qstring_free(qs_text)
|
||
return r
|
||
|
||
@staticmethod
|
||
def warning(parent: "QWidget | None", title: str, text: str, buttons: int = QT_OK) -> int:
|
||
qs_title: QtStringPtr = vqt6_qstring_create(title)
|
||
qs_text: QtStringPtr = vqt6_qstring_create(text)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
r: int = vqt6_qmessagebox_warning(parent_ptr, qs_title, qs_text, buttons)
|
||
vqt6_qstring_free(qs_title)
|
||
vqt6_qstring_free(qs_text)
|
||
return r
|
||
|
||
@staticmethod
|
||
def critical(parent: "QWidget | None", title: str, text: str, buttons: int = QT_OK) -> int:
|
||
qs_title: QtStringPtr = vqt6_qstring_create(title)
|
||
qs_text: QtStringPtr = vqt6_qstring_create(text)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
r: int = vqt6_qmessagebox_critical(parent_ptr, qs_title, qs_text, buttons)
|
||
vqt6_qstring_free(qs_title)
|
||
vqt6_qstring_free(qs_text)
|
||
return r
|
||
|
||
@staticmethod
|
||
def question(parent: "QWidget | None", title: str, text: str, buttons: int = QT_OK | QT_CANCEL) -> int:
|
||
qs_title: QtStringPtr = vqt6_qstring_create(title)
|
||
qs_text: QtStringPtr = vqt6_qstring_create(text)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
r: int = vqt6_qmessagebox_question(parent_ptr, qs_title, qs_text, buttons)
|
||
vqt6_qstring_free(qs_title)
|
||
vqt6_qstring_free(qs_text)
|
||
return r
|
||
|
||
@staticmethod
|
||
def about(parent: "QWidget | None", title: str, text: str):
|
||
qs_title: QtStringPtr = vqt6_qstring_create(title)
|
||
qs_text: QtStringPtr = vqt6_qstring_create(text)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
vqt6_qmessagebox_about(parent_ptr, qs_title, qs_text)
|
||
vqt6_qstring_free(qs_title)
|
||
vqt6_qstring_free(qs_text)
|
||
|
||
|
||
@t.NoVTable
|
||
class QFileDialog:
|
||
"""QFileDialog 静态对话框"""
|
||
_ptr: QtFileDialogPtr
|
||
|
||
@staticmethod
|
||
def getOpenFileName(parent: "QWidget | None", caption: str, directory: str, filter_str: str = "") -> str:
|
||
qs_caption: QtStringPtr = vqt6_qstring_create(caption)
|
||
qs_dir: QtStringPtr = vqt6_qstring_create(directory)
|
||
qs_filter: QtStringPtr = vqt6_qstring_create(filter_str)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
result: QtStringPtr = vqt6_qfiledialog_get_open_file_name(parent_ptr, qs_caption, qs_dir, qs_filter)
|
||
vqt6_qstring_free(qs_caption)
|
||
vqt6_qstring_free(qs_dir)
|
||
vqt6_qstring_free(qs_filter)
|
||
return _w_text_of(result)
|
||
|
||
@staticmethod
|
||
def getSaveFileName(parent: "QWidget | None", caption: str, directory: str, filter_str: str = "") -> str:
|
||
qs_caption: QtStringPtr = vqt6_qstring_create(caption)
|
||
qs_dir: QtStringPtr = vqt6_qstring_create(directory)
|
||
qs_filter: QtStringPtr = vqt6_qstring_create(filter_str)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
result: QtStringPtr = vqt6_qfiledialog_get_save_file_name(parent_ptr, qs_caption, qs_dir, qs_filter)
|
||
vqt6_qstring_free(qs_caption)
|
||
vqt6_qstring_free(qs_dir)
|
||
vqt6_qstring_free(qs_filter)
|
||
return _w_text_of(result)
|
||
|
||
@staticmethod
|
||
def getExistingDirectory(parent: "QWidget | None", caption: str, directory: str) -> str:
|
||
qs_caption: QtStringPtr = vqt6_qstring_create(caption)
|
||
qs_dir: QtStringPtr = vqt6_qstring_create(directory)
|
||
parent_ptr: t.CPtr = None
|
||
if parent is not None and parent._ptr is not None:
|
||
parent_ptr = parent._ptr
|
||
result: QtStringPtr = vqt6_qfiledialog_get_existing_directory(parent_ptr, qs_caption, qs_dir)
|
||
vqt6_qstring_free(qs_caption)
|
||
vqt6_qstring_free(qs_dir)
|
||
return _w_text_of(result)
|
||
|
||
|
||
# ============================================================
|
||
# 定时器:QTimer
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QTimer:
|
||
"""QTimer 包装"""
|
||
_ptr: QtTimerPtr
|
||
|
||
def __init__(self):
|
||
self._ptr = vqt6_qtimer_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QTimer")
|
||
|
||
def start(self, interval_ms: int):
|
||
vqt6_qtimer_start(self._ptr, interval_ms)
|
||
|
||
def stop(self):
|
||
vqt6_qtimer_stop(self._ptr)
|
||
|
||
def setInterval(self, interval_ms: int):
|
||
vqt6_qtimer_set_interval(self._ptr, interval_ms)
|
||
|
||
def interval(self) -> int:
|
||
return vqt6_qtimer_interval(self._ptr)
|
||
|
||
def setSingleShot(self, single_shot: int):
|
||
vqt6_qtimer_set_single_shot(self._ptr, single_shot)
|
||
|
||
def isActive(self) -> int:
|
||
return vqt6_qtimer_is_active(self._ptr)
|
||
|
||
def timeout(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qtimer_connect_timeout(self._ptr, cb, data)
|
||
|
||
|
||
# ============================================================
|
||
# 菜单:QMenuBar / QMenu / QAction / QStatusBar
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QMenuBar:
|
||
"""QMenuBar 包装"""
|
||
_ptr: QtMenuBarPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qmenubar_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qmenubar_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QMenuBar")
|
||
|
||
def addMenu(self, title: str) -> "QMenu":
|
||
qs: QtStringPtr = vqt6_qstring_create(title)
|
||
mp: QtMenuPtr = vqt6_qmenubar_add_menu(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
m = QMenu()
|
||
m._ptr = mp
|
||
return m
|
||
|
||
def addAction(self, action: t.CPtr):
|
||
vqt6_qmenubar_add_action(self._ptr, action)
|
||
|
||
def clear(self):
|
||
vqt6_qmenubar_clear(self._ptr)
|
||
|
||
|
||
@t.NoVTable
|
||
class QMenu:
|
||
"""QMenu 包装"""
|
||
_ptr: QtMenuPtr
|
||
|
||
def __init__(self, title: str = ""):
|
||
if title != "":
|
||
qs: QtStringPtr = vqt6_qstring_create(title)
|
||
self._ptr = vqt6_qmenu_create_with_title(qs)
|
||
vqt6_qstring_free(qs)
|
||
else:
|
||
self._ptr = vqt6_qmenu_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QMenu")
|
||
|
||
def addAction(self, action: t.CPtr):
|
||
vqt6_qmenu_add_action(self._ptr, action)
|
||
|
||
def addActionWithText(self, text: str) -> "QAction":
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
ap: QtActionPtr = vqt6_qmenu_add_action_with_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
a = QAction()
|
||
a._ptr = ap
|
||
return a
|
||
|
||
def addMenu(self, title: str) -> "QMenu":
|
||
qs: QtStringPtr = vqt6_qstring_create(title)
|
||
mp: QtMenuPtr = vqt6_qmenu_add_menu(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
m = QMenu()
|
||
m._ptr = mp
|
||
return m
|
||
|
||
def addSeparator(self):
|
||
vqt6_qmenu_add_separator(self._ptr)
|
||
|
||
def setTitle(self, title: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(title)
|
||
vqt6_qmenu_set_title(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def clear(self):
|
||
vqt6_qmenu_clear(self._ptr)
|
||
|
||
|
||
@t.NoVTable
|
||
class QAction:
|
||
"""QAction 包装"""
|
||
_ptr: QtActionPtr
|
||
|
||
def __init__(self, text: str = ""):
|
||
if text != "":
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
self._ptr = vqt6_qaction_create_with_text(qs)
|
||
vqt6_qstring_free(qs)
|
||
else:
|
||
self._ptr = vqt6_qaction_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QAction")
|
||
|
||
def setText(self, text: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(text)
|
||
vqt6_qaction_set_text(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def text(self) -> str:
|
||
return _w_text_of(vqt6_qaction_text(self._ptr))
|
||
|
||
def setShortcut(self, key_seq: str):
|
||
qs: QtStringPtr = vqt6_qstring_create(key_seq)
|
||
vqt6_qaction_set_shortcut(self._ptr, qs)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def setCheckable(self, checkable: int):
|
||
vqt6_qaction_set_checkable(self._ptr, checkable)
|
||
|
||
def isCheckable(self) -> int:
|
||
return vqt6_qaction_is_checkable(self._ptr)
|
||
|
||
def setChecked(self, checked: int):
|
||
vqt6_qaction_set_checked(self._ptr, checked)
|
||
|
||
def isChecked(self) -> int:
|
||
return vqt6_qaction_is_checked(self._ptr)
|
||
|
||
def setEnabled(self, enabled: int):
|
||
vqt6_qaction_set_enabled(self._ptr, enabled)
|
||
|
||
def isEnabled(self) -> int:
|
||
return vqt6_qaction_is_enabled(self._ptr)
|
||
|
||
def trigger(self):
|
||
vqt6_qaction_trigger(self._ptr)
|
||
|
||
def triggered(self, cb: bytes, data: bytes = 0):
|
||
vqt6_qaction_connect_triggered(self._ptr, cb, data)
|
||
|
||
|
||
@t.NoVTable
|
||
class QStatusBar:
|
||
"""QStatusBar 包装"""
|
||
_ptr: QtStatusBarPtr
|
||
|
||
def __init__(self, parent: "QWidget | None" = None):
|
||
if parent is not None and parent._ptr is not None:
|
||
self._ptr = vqt6_qstatusbar_create_with_parent(parent._ptr)
|
||
else:
|
||
self._ptr = vqt6_qstatusbar_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QStatusBar")
|
||
|
||
def showMessage(self, message: str, timeout_ms: int = 0):
|
||
qs: QtStringPtr = vqt6_qstring_create(message)
|
||
vqt6_qstatusbar_show_message(self._ptr, qs, timeout_ms)
|
||
vqt6_qstring_free(qs)
|
||
|
||
def clearMessage(self):
|
||
vqt6_qstatusbar_clear_message(self._ptr)
|
||
|
||
def currentMessage(self) -> str:
|
||
return _w_text_of(vqt6_qstatusbar_current_message(self._ptr))
|
||
|
||
def addWidget(self, w: t.CPtr, stretch: int = 0):
|
||
vqt6_qstatusbar_add_widget(self._ptr, w, stretch)
|
||
|
||
|
||
# ============================================================
|
||
# 绘图基础:QColor / QFont
|
||
# ============================================================
|
||
@t.NoVTable
|
||
class QColor:
|
||
"""QColor 包装"""
|
||
_ptr: QtColorPtr
|
||
|
||
def __init__(self, r: int, g: int, b: int, a: int = 255):
|
||
self._ptr = vqt6_qcolor_create_rgba(r, g, b, a)
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QColor")
|
||
|
||
def red(self) -> int:
|
||
return vqt6_qcolor_red(self._ptr)
|
||
|
||
def green(self) -> int:
|
||
return vqt6_qcolor_green(self._ptr)
|
||
|
||
def blue(self) -> int:
|
||
return vqt6_qcolor_blue(self._ptr)
|
||
|
||
def alpha(self) -> int:
|
||
return vqt6_qcolor_alpha(self._ptr)
|
||
|
||
|
||
@t.NoVTable
|
||
class QFont:
|
||
"""QFont 包装"""
|
||
_ptr: QtFontPtr
|
||
|
||
def __init__(self, family: str = "", point_size: int = 0):
|
||
if family != "":
|
||
qs: QtStringPtr = vqt6_qstring_create(family)
|
||
if point_size > 0:
|
||
self._ptr = vqt6_qfont_create_with_family_size(qs, point_size)
|
||
else:
|
||
self._ptr = vqt6_qfont_create_with_family(qs)
|
||
vqt6_qstring_free(qs)
|
||
else:
|
||
self._ptr = vqt6_qfont_create()
|
||
if self._ptr is None:
|
||
raise RuntimeError("Failed to create QFont")
|
||
|
||
def setPointSize(self, size: int):
|
||
vqt6_qfont_set_point_size(self._ptr, size)
|
||
|
||
def setPixelSize(self, size: int):
|
||
vqt6_qfont_set_pixel_size(self._ptr, size)
|
||
|
||
def setBold(self, bold: int):
|
||
vqt6_qfont_set_bold(self._ptr, bold)
|
||
|
||
def setItalic(self, italic: int):
|
||
vqt6_qfont_set_italic(self._ptr, italic)
|
||
|
||
def setUnderline(self, underline: int):
|
||
vqt6_qfont_set_underline(self._ptr, underline)
|
||
|
||
|
||
# ============================================================
|
||
# 模块导出
|
||
# ============================================================
|
||
__all__ = [
|
||
# 高层类
|
||
"QApplication", "QWidget", "QLabel", "QPushButton",
|
||
"QMainWindow", "QDialog",
|
||
"QLineEdit", "QCheckBox", "QRadioButton",
|
||
"QComboBox", "QSlider", "QSpinBox", "QProgressBar",
|
||
"QTextEdit", "QPlainTextEdit", "QListWidget",
|
||
"QTreeWidget", "QTreeWidgetItem",
|
||
"QTabWidget", "QStackedWidget",
|
||
"QHBoxLayout", "QVBoxLayout", "QGridLayout",
|
||
"QMessageBox", "QFileDialog", "QTimer",
|
||
"QMenuBar", "QMenu", "QAction", "QStatusBar",
|
||
"QColor", "QFont",
|
||
# 类型
|
||
"QtObjectPtr", "QtStringPtr", "QtByteArrayPtr", "QtWidgetPtr", "QtAppPtr",
|
||
"QtLabelPtr", "QtPushButtonPtr",
|
||
"QtTreeWidgetPtr", "QtTreeWidgetItemPtr",
|
||
"QtColorPtr", "QtFontPtr", "QtPixmapPtr", "QtImagePtr", "QtPainterPtr",
|
||
"QtTcpSocketPtr", "QtHostAddressPtr", "QtNetworkRequestPtr", "QtNetworkReplyPtr",
|
||
# 常量
|
||
"QT_KEY_ESCAPE", "QT_KEY_RETURN", "QT_KEY_A", "QT_KEY_Z",
|
||
"QT_LEFT_BUTTON", "QT_RIGHT_BUTTON", "QT_MID_BUTTON",
|
||
"QT_HORIZONTAL", "QT_VERTICAL",
|
||
"QT_ALIGN_LEFT", "QT_ALIGN_CENTER", "QT_ALIGN_RIGHT",
|
||
"QT_PORT_HTTP", "QT_PORT_HTTPS", "QT_PORT_FTP",
|
||
"QT_OK", "QT_CANCEL", "QT_YES", "QT_NO", "QT_CLOSE",
|
||
]
|