EtoUI, slider controls

I am using python to learn the Eto module
How can slider controls in EtoUI in python be tracked in real time by tag controls
I gave self.m_slider.Value to self.x_label.Text in the code, but I found that self.x_label.Text does not track the value of self.m_slider.Value.

import Rhino
import scriptcontext
import System
import Rhino.UI
import Eto.Drawing as drawing
import Eto.Forms as forms
#定义初始化变量
drawing_Width = 300
drawing_Height = 200
drawing_Padding = 20
drawing_Spacing_Size_0 = 5
drawing_Spacing_Size_1 = 5
m_slider_Boolean_value = False # m_slider控件是否切换为横竖向
class SampleEtoRoomNumberDialog(forms.Dialog[bool]):
    """"学习Eto框架"""
    def __init__(self):
        super().__init__()
        self.ClientSize = drawing.Size(drawing_Width, drawing_Height)
        self.Title = '新的窗口'
        self.Padding = drawing.Padding(drawing_Padding)
        self.Resizable = True
 
        #定义了一个Label框,用来接收字符
        self.m_label = forms.Label()
        self.m_label.Text = '输入一个字符:'
        self.m_textbox = forms.TextBox()
        self.m_textbox.Text = ""

        #定义了一个按钮,用来结束事件和启动函数
        self.DefaultButton = forms.Button()
        self.DefaultButton.Text ='OK'
        self.DefaultButton.Click += self.OnOKButtonClick
 

        #定义一个按钮来结束事件
        self.AbortButton = forms.Button()
        self.AbortButton.Text ='Cancel'
        self.AbortButton.Click += self.OnCloseButtonClick
        
        #定义一个slider滑块
        self.m_slider = forms.Slider()
        self.m_slider.Width = 12
        self.m_slider.SnapToTick = True
        if m_slider_Boolean_value:
            self.m_slider.Orientation = forms.Orientation.Vertical
        self.m_slider.MaxValue = 10
        self.m_slider.MinValue = 0
        self.m_slider.Value = 1

        #显示滑块的数值
        self.x_label = forms.Label()  
        int_slider_Value = self.m_slider.Value
        str1 = str(int_slider_Value)
        self.x_label.Text = str1
        
        #定义一个下拉选框
        self.m_dropdownlist = forms.DropDown()
        self.m_dropdownlist.SelectedIndex = 0 #定义默认的选区编号
        self.m_dropdownlist.DataStore = ['0', '1', '2']


        #创建一个表布局并添加所有控件
        layout = forms.DynamicLayout()
        #定义空白间距
        layout.Spacing = drawing.Size(drawing_Spacing_Size_0, drawing_Spacing_Size_1)
        #这里是让两个控件并排的语法写法
        layout.AddRow(self.m_label , None , self.m_textbox) #这里中间插入None是用来隔行
        layout.AddRow(None) # spacer
        layout.AddRow(self.m_slider , self.x_label)
        layout.AddRow(self.m_dropdownlist)
        layout.AddRow(self.DefaultButton, self.AbortButton)
        # 设置对话框类型
        self.Content = layout
 
    #下面是类函数的开始,执行事件
    #这里是获取self.m_textbox文本框的字符串
    def GetText(self):
        return self.m_textbox.Text
 
    #检查self.m_textbox.Text是否有值,然后使用self.Close(False)方法结束整个事件
    def OnCloseButtonClick(self, sender, e):
        self.m_textbox.Text = ""
        self.Close(False)
 
    #这是self.DefaultButton按钮的绑定函数,检查self.m_textbox.Text是否有值,然后结束事件.
    def OnOKButtonClick(self, sender, e):
        if self.m_textbox.Text == "":
            self.Close(False)
        else:
            self.Close(True)
#实例化对话框类,并调用其中的函数
def RequestRoomNumber():
    dialog = SampleEtoRoomNumberDialog();
    rc = dialog.ShowModal(Rhino.UI.RhinoEtoApp.MainWindow)
    if (rc):
        print(dialog.GetText()) #Print the Room Number from the dialog control
#放置被其他文件调用当前文件的类和函数
if __name__ == "__main__":
    RequestRoomNumber()

Hi @tom33, take a look at my example posted here

_
c.

2 Likes

Thank you, Sir.

I want to change to a semi-modal run, what method should I use

Bind successfully, thank you :grinning:

This is my binding method, if you need to please directly take away the source code with the code of the post, the binding method can be placed at the end
self.m_numeric_updown.ValueBinding.Bind(self.m_slider, "Value", forms.DualBindingMode.TwoWay)

2 Likes