#maxscript
Вопрос:
Я искал способ сделать это, например, в поле запроса, где подчеркнуты Y и N » Да » и «Нет», чтобы указать, что если вы нажмете их, это то, что будет нажато.
Вот код и неправильный результирующий снимок экрана, который у меня есть, где я поставил кнопку «амперсанд перед».
try destroyDialog testRol catch()
rollout testRol "testRol" (
button btn_test "amp;Button"
)
createDialog testRol 100 45
Редактировать:
Даже если я попытаюсь, x0332Yes
это не сработает. Это так, но подчеркивание выстроено неправильно, и при использовании перед a B
оно выглядит беспорядочно.
Я использовал жестко закодированные подчеркнутые буквы, которые работают не идеально, поэтому, если кто-нибудь знает решение, которое было бы здорово избежать этого.
Вот эта попытка, поскольку она может помочь вам разобраться в этом:
try destroyDialog testRol catch()
rollout testRol "testRol" (
button btn_yes "Y̲es (Working)" width:120 across:4
button btn_no "N̲o (Working)" width:120
button btn_button_not_working "x0332Button (Not Working)" width:120
button btn_yes_not_working "x0332Yes (Kinda Working)" width:120
)
createDialog testRol 525 45
Ответ №1:
В зависимости от ваших ожиданий, вы можете использовать кнопку .NET внутри элемента управления развертыванием но вы должны сами оформить его в соответствии с темой и используйте системный стиль, чтобы он выглядел как кнопка maxscript:
try destroyDialog testRol catch()
rollout testRol "MXS .NET"
(
dotNetControl btnMakeCylinder "Button" text:"amp;Make Cylinder" width:120 height:25
on btnMakeCylinder mouseClick evnt arg do with undo on Cylinder isSelected:on
on testRol open do btnMakeCylinder.FlatStyle = btnMakeCylinder.FlatStyle.System
)
createDialog testRol
Или вы можете использовать MaxForm, где кнопка унаследует цвета, но она все равно будет выглядеть не так, как остальная часть пользовательского интерфейса:
(
local form = dotNetObject "MaxCustomControls.MaxForm"
form.Text = ".NET form"
fn makeCylinder = with undo on Cylinder isSelected:on
local btnMakeCylinder = dotNetObject "Button"
btnMakeCylinder.Text = "amp;Make Cylinder"
dotNet.addEventHandler btnMakeCylinder "MouseClick" makeCylinder
form.Controls.Add btnMakecylinder
form.ShowModeless()
)
Или вы можете использовать пользовательский интерфейс Qt, который имеет свой собственный набор недостатков (например, необходимость всегда явно указывать записи отмены), и он довольно многословен:
(
local legacy = (python.import "sys").version_info[1] < 3
local QtGui = python.import "PySide2.QtGui"
local QtWidgets = python.import "PySide2.QtWidgets"
local GetQMaxMainWindow = (if legacy then python.import "MaxPlus" else python.import "qtmax").GetQMaxMainWindow
if isProperty ::testQtDialog #close do testQtDialog.close()
testQtDialog = QtWidgets.QDialog(GetQMaxMainWindow())
testQtDialog.setWindowTitle "Qt Window"
local dialogLayout = QtWidgets.QVBoxLayout()
fn makeCylinder = with undo on Cylinder isSelected:on
local btnMakeCylinder = QtWidgets.QPushButton "amp;Make Cylinder"
btnMakeCylinder.clicked.connect makeCylinder
dialogLayout.addWidget btnMakeCylinder
testQtDialog.setLayout dialogLayout
testQtDialog.show()
)
С 2022 года вы также можете сделать окна Qt с собственными элементами управления max таким образом:
if isKindOf testQtRol RolloutClass do UIAccessor.closeDialog testQtRol.hwnd
rollout testQtRol "Qt Rollout"
(
QtButton btnMakeCylinder "amp;Make cylinder" row:0 column:2
on btnMakeCylinder pressed do with undo on Cylinder isSelected:on
)
createQtDialog testQtRol
Комментарии:
1. Спасибо за отличный ответ, хотя, к сожалению, нет способа сделать это со стандартным управлением, что очень жаль. Я посмотрю-может быть, это . Кнопка «СЕТЬ» может быть оформлена в соответствии со встроенной кнопкой. Что вы думаете о том, как я жестко закодировал букву Y
Y̲es
? Отредактируйте, когда сценарий зашифрован, он делает это так, что жесткое кодирование не годится. https://i.imgur.com/xZci87d.png2. если вы используете
btn.FlatStyle = btn.FlatStyle.System
кнопку dotNet, она будет выглядеть точно так же, как кнопка в Макс. Я получил это от Дениста . Так что в итоге я пошел с этим . СЕТЕВОЕ управление кнопками, и это отлично работает. Вы можете добавить этот стиль к ответу, и я отмечу его как принятый 🙂 Спасибо @Swordslayer.3. Молодец, ДенисТ-тот самый мужчина 🙂 Отредактированный.
4. Да, я был поражен, что это было что-то настолько непонятное и простое. Я провел поиск по своим фрагментам maxscript и другим примерам, и единственным, кто использовал это, является скрипт Show DotNet Properties от Kstudio. пс. Я не могу поверить, что научил тебя чему-то (ну, по крайней мере, передал это!)