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()