复选框和单选按钮——WindowsForm系列教程

你好,这里是BIM的乐趣,我是九哥~

很多程序的GUI中都有两个常见小部件:单选按钮和复选框。

这些是直观地向用户提供多种选择的方法。我敢肯定,你们都熟悉这些形式的输入,但复选框允许用户打开和关闭个别选项,而单选按钮允许用户选择一个选项。

在 IronPython中,我们可以相当容易的设置这些小部件。我们可以询问他们,找出他们处于什么状态,或者设置当用户做出选择时要执行的操作。你可以使用此选项根据选择的选项动态更改 GUI 的状态。

这两个小部件的使用非常相似。让我们从使用 CheckBox 的示例开始。

同样,Microsoft MSDN 文档中的代码示例告诉我们CheckBox的构造函数不采用任何参数:

CheckBox checkBox1 = new CheckBox();

下面的示例显示了 CheckBox 上可用的几个有用属性。


import clr
clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Drawing')from System.Drawing import Point
from System.Windows.Forms import Application, Button, CheckBox, Form, Labelclass CheckBoxExampleForm(Form):def __init__(self):self.Text = "BIM软件使用调研:"self.Width = 400self.Height = 125self.label = Label()self.label.Text = "选择你使用的BIM软件"self.label.Location = Point(25, 25)self.label.AutoSize = Trueself.check1 = CheckBox()self.check1.Text = "Revit"self.check1.Location = Point(25, 50)self.check1.Width = 90self.check2 = CheckBox()self.check2.Text = "ArchiCAD"self.check2.Location = Point(125, 50)self.check2.Width = 110self.check3 = CheckBox()self.check3.Text = "Bently"self.check3.Location = Point(240, 50)self.check3.Width = 120self.check3.Checked = Trueself.Controls.Add(self.label)self.Controls.Add(self.check1)self.Controls.Add(self.check2)self.Controls.Add(self.check3)form = CheckBoxExampleForm()
Application.Run(form)

请注意,这一次我们使用标签的 AutoSize属性以避免显式设置大小。当我们更新文本时,标签将自动调整大小,以便其全部内容可见。

我们设置了第三个 CheckBox,使用"已选中的属性"开始选中。这是一个属性,因此我们可以"检查"此值以查看按钮处于什么状态。

单选按钮同样易于使用。

它使用的方式与CheckButton相同,具有一组类似的Member。我们将设置要检查的第一个按钮。

除此之外,我们将在单选按钮更改状态时设置要调用的方法。为此,我们将使用CheckedChange 事件。我们可以检查按钮的状态,因为我们知道事件的发送方参数将是已更改的控件。

无论如何,足够的解释和代码。为了让它更有趣一点,我们将对最后一个标签使用的字体进行修改。


import clr
clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Drawing')import sys
sys.path.append('c:\\Python24\\Lib')from random import randomfrom System.Drawing import Color, Font, FontStyle, Point
from System.Windows.Forms import (Application, BorderStyle, Button, CheckBox,Form, Label, Panel, RadioButton)class ChecksAndRadiosForm(Form):def __init__(self):self.Text = "BIM软件使用调研:"self.Width = 400self.Height = 300self.setupCheckButtons()self.setupRadioButtons()self.Controls.Add(self.checkPanel)self.Controls.Add(self.radioPanel)def newPanel(self, x, y):panel = Panel()panel.Width = 400panel.Height = 150panel.Location = Point(x, y)panel.BorderStyle = BorderStyle.Fixed3Dreturn paneldef setupCheckButtons(self):self.checkPanel = self.newPanel(0, 0)self.checkLabel = Label()self.checkLabel.Text = "选择你使用的BIM软件"self.checkLabel.Location = Point(25, 25)self.checkLabel.AutoSize = Trueself.check1 = CheckBox()self.check1.Text = "Revit"self.check1.Location = Point(25, 50)self.check1.Width = 90self.check2 = CheckBox()self.check2.Text = "ArchiCAD"self.check2.Location = Point(125, 50)self.check2.Width = 110self.check3 = CheckBox()self.check3.Text = "Bently"self.check3.Location = Point(240, 50)self.check3.Width = 120self.checkPanel.Controls.Add(self.checkLabel)self.checkPanel.Controls.Add(self.check1)self.checkPanel.Controls.Add(self.check2)self.checkPanel.Controls.Add(self.check3)def setupRadioButtons(self):self.radioPanel = self.newPanel(0, 150)self.radioLabel1 = Label()self.radioLabel1.Text = "告诉我你的性别"self.radioLabel1.Location = Point(25, 25)self.radioLabel1.AutoSize = Trueself.radio1 = RadioButton()self.radio1.Text = "男"self.radio1.Location = Point(25, 50)self.radio1.Checked = Trueself.radio1.CheckedChanged += self.checkedChangedself.radio2 = RadioButton()self.radio2.Text = "女"self.radio2.Location = Point(150, 50)self.radio2.CheckedChanged += self.checkedChangedself.radio3 = RadioButton()self.radio3.Text = "外星人"self.radio3.Location = Point(300, 50)self.radio3.CheckedChanged += self.checkedChangedself.radioLabel2 = Label()self.radioLabel2.Text = "来吧,告诉我!"self.radioLabel2.Location = Point(25, 80)self.radioLabel2.AutoSize = Trueself.radioLabel2.Font = Font("华文彩云", 15, FontStyle.Bold)self.radioLabel2.ForeColor = Color.Redself.radioPanel.Controls.Add(self.radioLabel1)self.radioPanel.Controls.Add(self.radioLabel2)self.radioPanel.Controls.Add(self.radio1)self.radioPanel.Controls.Add(self.radio2)self.radioPanel.Controls.Add(self.radio3)def checkedChanged(self, sender, args):if not sender.Checked:returnif sender.Text == "外星人":self.radioLabel2.Text = "你在开玩笑吗 ?"style = FontStyle.Bold | FontStyle.Italicself.radioLabel2.Font = Font("楷体", 15, style)self.radioLabel2.ForeColor = Color.FromArgb(int(random() * 256),int(random() * 256),int(random() * 256))else:self.radioLabel2.Text = "说得对"self.radioLabel2.Font = Font("华文行楷", 15, FontStyle.Regular)self.radioLabel2.ForeColor = Color.Redform = ChecksAndRadiosForm()
Application.Run(form)

在 Windows 上,如下所示

如果你告诉我你是一个外星人,它做这样的事情:

RadioButton 的东西很简单,新的是我们使用字体和颜色的方式。

我们使用字体类初始化新字体。从字体构造函数文档中,您可以看到有几种不同的方法来初始化它。

我们使用的两个是:

字体(字符串、单字符样式)

这将从名称和大小初始化新字体。

字体(字符串、单字符样式、字体样式)

这将从名称、大小和样式初始化新字体。

在第一种情况下,我们只提供一个字体名称和大小。构造函数签名调用用于大小为Single的对象类型。在 C# 示例中,你可以看到它指定为浮点数。IronPython 并不复杂, 允许我们使用整数。

在第二种情况下(在ChecksandRadiosForm.checkedChanged中使用),我们指定了 FontStyle。FontStyle 是具有各种不同成员的枚举,用于表示不同的样式:

    • Bold——粗体文本;
    • Italic——斜体文本;
    • Regular——普通文本;
    • Strikeout——中间有一行的文本;
    • Underline——下划线文本。

如果我们想要组合它们,我们可以使用"或"运算符" | "。这将返回一个新的字体样式,其中选择了多种样式。

以下代码将生成粗体、带下划线的文本:

style = FontStyle.Bold | FontStyle.Italic | FontStyle.Underline

你不能更改字体的样式。Style属性是只读的。它的大小,你可以使用SizeInPoints 属性检查它的大小。如果要更改文本样式,必须创建新字体并替换旧字体。

我们还用了一个巧妙的技巧,我们的老朋友Color。我们不是使用预定义的颜色,而是使用Color.FromArgb 方法创建了一个。同样,这有几个构造函数。我们传递了三个表示红色、绿色和蓝色分量的整数。

是不是很简单~我认为我们有足够的了解,学习一个更明智的方法来布局我们的GUI。


 

好了,今天的分享就到这里,小伙伴们快去自己尝试吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Verilog刷题笔记18

题目:An if statement usually creates a 2-to-1 multiplexer, selecting one input if the condition is true, and the other input if the condition is false. 解题: module top_module(input a,input b,input sel_b1,input sel_b2,output wire ou…

聚焦网络安全公司,看F5如何应对企业数字化挑战

应用无处不在的当下,从传统应用到现代应用再到边缘、多云、多中心的安全防护,安全已成为企业数字化转型中的首要挑战。有专家指出,目前网络安全市场已经是仅次于计算、存储、网络的第四大IT基础设施市场。那什么网络安全公司应该具有哪些能力…

vue3 使用defineAsyncComponent 动态加载组件

问题场景 在项目中使用静态加载组件基本能覆盖80%的场景了,如下图 但是我们在需要 循环生成一些的component 的时候或者在 开发ssr服务端渲染的页面 就会遇到有些组件以静态方式导入就会报错,导致进程失败,那么这时候就需要用到动态组件。那…

第8节、双电机多段直线运动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】,查看本系列全部文章 摘要:前面章节主要介绍了bresenham直线插值运动,本节内容介绍让两个电机完成连续的直线运动,目标是画一个正五角星 一、五角星图介绍 五角星总共10条直线,10个顶点。设定左下角为原点…

入侵报警系统行业研究:智能化潮流助力市场维持正增长

侵报警系统intruder alarm system(IAS)利用传感器技术和电子信息技术探测并指示非法进入或试图非法进入设防区域(包括主观判断面临被劫持或遭抢劫或其他危急情况时,故意触发紧急报警装置)的行为,处理报警信息、发出报警信息的电子系统或网络。 当入侵行为…

解析与模拟常用字符串函数strcpy,strcat,strcmp,strstr(一)

今天也是去学习了一波字符串函数,想着也为了加深记忆,所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…

哪些洗地机比较好?家用洗地机选购攻略

洗地机集合了拖把跟吸尘器的功能,面对地面上的水渍、油污脏东西可以快速的清洁干净。从去年开始洗地机领域的竞争就变得异常激烈。各大厂家纷纷推出各自的主打型号,有的注重续航,有的突出清洁效能,还有的专注于性价比。相较于前几…

谷歌seo搜索引擎优化教程有吗?

教程,教学,指南,这些东西哪里都有,尤其是关于seo相关方面的,这些可以说到处都是,能把谷歌seo这个关键词做上去的,可以说就是实力的证明了,在这里我们说一个无论是老手还是新手都应该…

【知识图谱+大模型的紧耦合新范式】Think-on-Graph:解决大模型在医疗、法律、金融等垂直领域的幻觉

Think-on-Graph:解决大模型在医疗、法律、金融等垂直领域的幻觉 Think-on-Graph 原理ToG 算法步骤:想想再查,查查再想实验结果 论文:https://arxiv.org/abs/2307.07697 代码:https://github.com/IDEA-FinAI/ToG Think…

PYthon进阶--网页采集器(基于百度搜索的Python3爬虫程序)

简介:基于百度搜索引擎的PYthon3爬虫程序的网页采集器,小白和爬虫学习者都可以学会。运行爬虫程序,输入关键词,即可将所搜出来的网页内容保存在本地。 知识点:requests模块的get方法 一、此处需要安装第三方库reques…

dump分析方法

一、关于dump 1、什么是dump 在计算机领域中,术语“dump”通常用来指代将某种数据以某种格式进行转储或导出的过程。这个术语可以用于多种不同的上下文,下面是一些常见的情况: 内存转储(Memory Dump):在…

网络空间内生安全数学基础(2)——编码信道数学模型

目录 (零)这篇博客在干什么(一)内生安全与香农信道编码定理(二)基本定义(三)编码信道存在定理(三.壹)编码信道存在第一定理(三.贰)编码…

Micro micro controller一览

https://www.microchip.com.cn/, Microchip中文网站 https://www.microchip.com.cn/newcommunity/index.php?mSearch&adosearch&moduleDownload&keyworddsPIC33&p3 Microcontrollers and microProcessors dsPIC33 Digital Signal Controllers (D…

Leetcode第123场双周赛

Leetcode第123场双周赛 本人水平有限,只做前三道 一、三角形类型 给你一个下标从 0 开始长度为 3 的整数数组 nums ,需要用它们来构造三角形。 如果一个三角形的所有边长度相等,那么这个三角形称为 equilateral 。 如果一个三角形恰好有两…

大学生创新实践:班级管理系统全解析

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Redis(十三)缓存双写一致性策略

文章目录 概述示例 缓存双写一致性缓存按照操作来分,细分2种读写缓存:同步直写策略读写缓存:异步缓写策略双检加锁策略 数据库和缓存一致性更新策略先更新数据库,再更新缓存先更新缓存,再更新数据库先删除缓存&#xf…

不懂快团团大团长对接?凭什么快团团的钱轮到你赚?

对接头部快团团大团长,让快团团大团长帮你卖货 分享几个推品的关键词: 1.推品的内容:产品实拍图核心卖点 不要上来就发笔记,你的产品图和文案还没吸引人,就发笔记没有人看。 可以先发你产品的简短卖点和图片&#xff…

ionic报错:Cannot read properties of undefined (reading ‘classList‘)

报错信息&#xff1a; [ionic/vue Warning]: The view you are trying to render for path /tabs/tab1 does not have the required <ion-page> component. Transitions and lifecycle methods may not work as expected.See https://ionicframework.com/docs/vue/navig…

Go语言每日一练链表篇(一)

题目传送门 牛客面试必刷101题 ----------反转链表 题目以及答案源码 反转链表 题目 解题方法 递归函数遍历链表并反转 package main import _"fmt" import . "nc_tools" /** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的…

关于harbor做HA

我起初是用helm在k8s上装的harbor&#xff0c;最近遇到如下故障&#xff1a;就是服务器硬件设备故障突然死机&#xff0c;恰巧是harbor容器所在的服务器&#xff0c;其他在这个服务器上运行的容器&#xff0c;由kubelet调度到其他正常的服务器上重启去了&#xff0c;但harbkor并…