flex 用3的combobox改成可搜索的

本文介绍了一个自定义的Flash ComboBox组件,该组件支持实时过滤数据,适用于Adobe Flex SDK 3及更高版本。通过重写文本输入改变事件处理程序,实现根据用户输入实时筛选下拉列表中的项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com
{
import flash.events.Event;
import mx.collections.ArrayCollection;
import mx.controls.ComboBox;
public class FilterComboBox extends ComboBox
{
public function FilterComboBox()
{
super();
this.editable=true;
}
override protected function textInput_changeHandler(event:Event):void{ 
super.textInput_changeHandler(event); 
FilterByKey(event); 
//过滤数据 
private function FilterByKey(event:Event):void{ 
var tempDataProvider:ArrayCollection = this.dataProvider as ArrayCollection;
if (tempDataProvider == null){
return;
}
this.dataProvider.filterFunction = filterFunction; 
var tempstr:String = this.text; 
if(tempDataProvider.refresh()){ 
this.dropdown.selectedIndex = -1; 
this.dropdown.verticalScrollPosition = 0; 
this.text = tempstr; 
this.open(); 
this.textInput.setFocus(); 
this.textInput.selectRange(tempstr.length,tempstr.length);
}
private function filterFunction(item:Object):Boolean{ 
return item[this.labelField].toString().indexOf(this.text)!=-1; 
}
}

这是全部代码-----重点有几个,第一 
this.textInput.selectRange(tempstr.length,tempstr.length);
这行代码是在sdk为4以上用得;
要是在sdk为3的时候用
this.textInput.setSelection(tempstr.length,tempstr.length);
这句话很重要:
输入文本框的文字显示不出来,因为系统默认将光标一直放在第一个位置,造成用户输入的文字被取消掉,所以在即使不需要补全是,也要进行textInput.setSelection的操作 。
第二:因为这句话return item[this.labelField].toString().indexOf(this.text)!=-1;  
用这个 自定义组件的时候必须设置labelfield;

为什么我会这么蛋疼,明明有s:combobox的搜索组件了,为什么还弄这个,因为外国很多技术大牛写的东西不支持直接使用4的组件,他们写的东西都是一套的很不好改,所以只能在这方面下手
rom tkinter import * from tkinter import ttk, filedialog import os import subprocess import sys class WindLoadCalculator: def __init__(self, root): self.root = root self.root.title("聚之义美标风荷载计算1.0-应用研发") # 设置窗口图标 try: if getattr(sys, &#39;frozen&#39;, False): application_path = os.path.dirname(sys.executable) else: application_path = os.path.dirname(os.path.abspath(__file__)) icon_path = os.path.join(application_path, "source", "amwind.ico") if os.path.exists(icon_path): self.root.iconbitmap(icon_path) except: pass # 设置窗口尺寸并禁止修改 width, height = 800, 650 self.root.geometry(f"{width}x{height}") self.root.resizable(False, False) # 居中显示窗口 screen_width = self.root.winfo_screenwidth() screen_height = self.root.winfo_screenheight() x = (screen_width - width) // 2 y = (screen_height - height) // 2 self.root.geometry(f"+{x}+{y}") # 设置中文字体 self.style = ttk.Style() self.style.configure(".", font=("SimHei", 10)) # 创建输入框架 input_frame = ttk.LabelFrame(root, text="输入参数") input_frame.pack(fill="x", padx=10, pady=10) # 风速输入 ttk.Label(input_frame, text="3秒时距风速 (m/s):").grid(row=0, column=0, sticky=W, padx=5, pady=5) self.wind_speed = DoubleVar(value=30) ttk.Entry(input_frame, textvariable=self.wind_speed, width=10).grid(row=0, column=1, sticky=W, padx=5, pady=5) # 暴露等级选择 ttk.Label(input_frame, text="暴露等级:").grid(row=1, column=0, sticky=W, padx=5, pady=5) self.exposure_class = StringVar(value="B") ttk.Combobox(input_frame, textvariable=self.exposure_class, values=["B", "C", "D"], width=9).grid(row=1, column=1, sticky=W, padx=5, pady=5) # 山地坡度选择 ttk.Label(input_frame, text="山地坡度:").grid(row=2, column=0, sticky=W, padx=5, pady=5) self.slope = StringVar(value="0%") ttk.Combobox(input_frame, textvariable=self.slope, values=["0%", "5%", "10%", "15%", "20%", "25%", "30%"], width=9).grid(row=2, column=1, sticky=W, padx=5, pady=5) # 海拔高度输入 ttk.Label(input_frame, text="海拔高度 (m):").grid(row=3, column=0, sticky=W, padx=5, pady=5) self.altitude = DoubleVar(value=0) ttk.Entry(input_frame, textvariable=self.altitude, width=10).grid(row=3, column=1, sticky=W, padx=5, pady=5) # 光伏支架倾角输入 ttk.Label(input_frame, text="光伏支架倾角 (度):").grid(row=4, column=0, sticky=W, padx=5, pady=5) self.tilt_angle = DoubleVar(value=30) ttk.Entry(input_frame, textvariable=self.tilt_angle, width=10).grid(row=4, column=1, sticky=W, padx=5, pady=5) # 创建计算按钮和帮助按钮 button_frame = ttk.Frame(root) button_frame.pack(fill="x", padx=10, pady=10) ttk.Button(button_frame, text="计算", command=self.calculate).pack(side=LEFT, padx=5) ttk.Button(button_frame, text="计算书", command=self.export_calculation_results).pack(side=LEFT, padx=5) # 创建结果框架 result_frame = ttk.LabelFrame(root, text="计算结果") result_frame.pack(fill="both", expand=True, padx=10, pady=10) # 创建输入参数结果区域 input_result_frame = ttk.Frame(result_frame) input_result_frame.pack(fill="x", padx=5, pady=5) ttk.Label(input_result_frame, text="风速:").grid(row=0, column=0, sticky=W, padx=5, pady=2) self.wind_speed_result = self.create_readonly_text(input_result_frame) self.wind_speed_result.grid(row=0, column=1, sticky=W, padx=5, pady=2) ttk.Label(input_result_frame, text="暴露等级:").grid(row=0, column=2, sticky=W, padx=5, pady=2) self.exposure_result = self.create_readonly_text(input_result_frame) self.exposure_result.grid(row=0, column=3, sticky=W, padx=5, pady=2) ttk.Label(input_result_frame, text="山地坡度:").grid(row=1, column=0, sticky=W, padx=5, pady=2) self.slope_result = self.create_readonly_text(input_result_frame) self.slope_result.grid(row=1, column=1, sticky=W, padx=5, pady=2) ttk.Label(input_result_frame, text="海拔高度:").grid(row=1, column=2, sticky=W, padx=5, pady=2) self.altitude_result = self.create_readonly_text(input_result_frame) self.altitude_result.grid(row=1, column=3, sticky=W, padx=5, pady=2) ttk.Label(input_result_frame, text="光伏支架倾角:").grid(row=2, column=0, sticky=W, padx=5, pady=2) self.tilt_angle_result = self.create_readonly_text(input_result_frame) self.tilt_angle_result.grid(row=2, column=1, sticky=W, padx=5, pady=2) # 创建中间系数结果区域 coeff_frame = ttk.LabelFrame(result_frame, text="中间系数") coeff_frame.pack(fill="x", padx=5, pady=5) ttk.Label(coeff_frame, text="速度压力暴露系数(kz):").grid(row=0, column=0, sticky=W, padx=5, pady=2) self.kz_result = self.create_readonly_text(coeff_frame) self.kz_result.grid(row=0, column=1, sticky=W, padx=5, pady=2) ttk.Label(coeff_frame, text="山形系数(kzt):").grid(row=0, column=2, sticky=W, padx=5, pady=2) self.kzt_result = self.create_readonly_text(coeff_frame) self.kzt_result.grid(row=0, column=3, sticky=W, padx=5, pady=2) ttk.Label(coeff_frame, text="地面高程系数(ke):").grid(row=1, column=0, sticky=W, padx=5, pady=2) self.ke_result = self.create_readonly_text(coeff_frame) self.ke_result.grid(row=1, column=1, sticky=W, padx=5, pady=2) ttk.Label(coeff_frame, text="风向因子(kd):").grid(row=1, column=2, sticky=W, padx=5, pady=2) self.kd_result = self.create_readonly_text(coeff_frame) self.kd_result.grid(row=1, column=3, sticky=W, padx=5, pady=2) ttk.Label(coeff_frame, text="阵风效应系数(G):").grid(row=2, column=0, sticky=W, padx=5, pady=2) self.G_result = self.create_readonly_text(coeff_frame) self.G_result.grid(row=2, column=1, sticky=W, padx=5, pady=2) # 创建0度风向角结果区域 wind_0_frame = ttk.LabelFrame(result_frame, text="0度风向角") wind_0_frame.pack(fill="x", padx=5, pady=5) # Case A case_a_0_frame = ttk.LabelFrame(wind_0_frame, text="Case A") case_a_0_frame.grid(row=0, column=0, sticky="nsew", padx=5, pady=5) ttk.Label(case_a_0_frame, text="CNW:").grid(row=0, column=0, sticky=W, padx=5, pady=2) self.cnw_0_a_result = self.create_readonly_text(case_a_0_frame) self.cnw_0_a_result.grid(row=0, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_a_0_frame, text="CNL:").grid(row=0, column=2, sticky=W, padx=5, pady=2) self.cnl_0_a_result = self.create_readonly_text(case_a_0_frame) self.cnl_0_a_result.grid(row=0, column=3, sticky=W, padx=5, pady=2) ttk.Label(case_a_0_frame, text="PNW:").grid(row=1, column=0, sticky=W, padx=5, pady=2) self.pnw_0_a_result = self.create_readonly_text(case_a_0_frame) self.pnw_0_a_result.grid(row=1, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_a_0_frame, text="PNL:").grid(row=1, column=2, sticky=W, padx=5, pady=2) self.pnl_0_a_result = self.create_readonly_text(case_a_0_frame) self.pnl_0_a_result.grid(row=1, column=3, sticky=W, padx=5, pady=2) # Case B case_b_0_frame = ttk.LabelFrame(wind_0_frame, text="Case B") case_b_0_frame.grid(row=0, column=1, sticky="nsew", padx=5, pady=5) ttk.Label(case_b_0_frame, text="CNW:").grid(row=0, column=0, sticky=W, padx=5, pady=2) self.cnw_0_b_result = self.create_readonly_text(case_b_0_frame) self.cnw_0_b_result.grid(row=0, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_b_0_frame, text="CNL:").grid(row=0, column=2, sticky=W, padx=5, pady=2) self.cnl_0_b_result = self.create_readonly_text(case_b_0_frame) self.cnl_0_b_result.grid(row=0, column=3, sticky=W, padx=5, pady=2) ttk.Label(case_b_0_frame, text="PNW:").grid(row=1, column=0, sticky=W, padx=5, pady=2) self.pnw_0_b_result = self.create_readonly_text(case_b_0_frame) self.pnw_0_b_result.grid(row=1, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_b_0_frame, text="PNL:").grid(row=1, column=2, sticky=W, padx=5, pady=2) self.pnl_0_b_result = self.create_readonly_text(case_b_0_frame) self.pnl_0_b_result.grid(row=1, column=3, sticky=W, padx=5, pady=2) # 创建180度风向角结果区域 wind_180_frame = ttk.LabelFrame(result_frame, text="180度风向角") wind_180_frame.pack(fill="x", padx=5, pady=5) # Case A case_a_180_frame = ttk.LabelFrame(wind_180_frame, text="Case A") case_a_180_frame.grid(row=0, column=0, sticky="nsew", padx=5, pady=5) ttk.Label(case_a_180_frame, text="CNW:").grid(row=0, column=0, sticky=W, padx=5, pady=2) self.cnw_180_a_result = self.create_readonly_text(case_a_180_frame) self.cnw_180_a_result.grid(row=0, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_a_180_frame, text="CNL:").grid(row=0, column=2, sticky=W, padx=5, pady=2) self.cnl_180_a_result = self.create_readonly_text(case_a_180_frame) self.cnl_180_a_result.grid(row=0, column=3, sticky=W, padx=5, pady=2) ttk.Label(case_a_180_frame, text="PNW:").grid(row=1, column=0, sticky=W, padx=5, pady=2) self.pnw_180_a_result = self.create_readonly_text(case_a_180_frame) self.pnw_180_a_result.grid(row=1, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_a_180_frame, text="PNL:").grid(row=1, column=2, sticky=W, padx=5, pady=2) self.pnl_180_a_result = self.create_readonly_text(case_a_180_frame) self.pnl_180_a_result.grid(row=1, column=3, sticky=W, padx=5, pady=2) # Case B case_b_180_frame = ttk.LabelFrame(wind_180_frame, text="Case B") case_b_180_frame.grid(row=0, column=1, sticky="nsew", padx=5, pady=5) ttk.Label(case_b_180_frame, text="CNW:").grid(row=0, column=0, sticky=W, padx=5, pady=2) self.cnw_180_b_result = self.create_readonly_text(case_b_180_frame) self.cnw_180_b_result.grid(row=0, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_b_180_frame, text="CNL:").grid(row=0, column=2, sticky=W, padx=5, pady=2) self.cnl_180_b_result = self.create_readonly_text(case_b_180_frame) self.cnl_180_b_result.grid(row=0, column=3, sticky=W, padx=5, pady=2) ttk.Label(case_b_180_frame, text="PNW:").grid(row=1, column=0, sticky=W, padx=5, pady=2) self.pnw_180_b_result = self.create_readonly_text(case_b_180_frame) self.pnw_180_b_result.grid(row=1, column=1, sticky=W, padx=5, pady=2) ttk.Label(case_b_180_frame, text="PNL:").grid(row=1, column=2, sticky=W, padx=5, pady=2) self.pnl_180_b_result = self.create_readonly_text(case_b_180_frame) self.pnl_180_b_result.grid(row=1, column=3, sticky=W, padx=5, pady=2) # 初始化显示说明 self.display_instructions() # 加载并显示图片(使用绝对坐标定位,确保在顶层) try: # 获取应用程序路径 if getattr(sys, &#39;frozen&#39;, False): application_path = os.path.dirname(sys.executable) else: application_path = os.path.dirname(os.path.abspath(__file__)) # 构建图片路径 image_path = os.path.join(application_path, "source", "AMWIND.GIF") # 检查图片文件是否存在 if os.path.exists(image_path): # 加载图片 self.logo_image = PhotoImage(file=image_path) # 创建一个Label来显示图片,使用place方法进行绝对定位 self.image_label = Label(self.root, image=self.logo_image, bg="white") self.image_label.place(x=width - self.logo_image.width() - 10, y=10) # 将图片Label提升到顶层 self.image_label.lift() except Exception as e: print(f"加载图片时出错: {e}") def create_readonly_text(self, parent): """创建只读文本框,通过背景色区分可编辑和不可编辑文本框""" text = Text(parent, height=1, width=15, state="disabled", bg="#f0f0f0") return text def display_instructions(self): """显示程序说明""" self.set_text_widget(self.wind_speed_result, "请输入风速") self.set_text_widget(self.exposure_result, "请选择暴露等级") self.set_text_widget(self.slope_result, "请选择山地坡度") self.set_text_widget(self.altitude_result, "请输入海拔高度") self.set_text_widget(self.tilt_angle_result, "请输入光伏支架倾角") self.clear_result_widgets() def clear_result_widgets(self): """清空所有结果文本框""" for widget in [ self.kz_result, self.kzt_result, self.ke_result, self.kd_result, self.G_result, self.cnw_0_a_result, self.cnl_0_a_result, self.pnw_0_a_result, self.pnl_0_a_result, self.cnw_0_b_result, self.cnl_0_b_result, self.pnw_0_b_result, self.pnl_0_b_result, self.cnw_180_a_result, self.cnl_180_a_result, self.pnw_180_a_result, self.pnl_180_a_result, self.cnw_180_b_result, self.cnl_180_b_result, self.pnw_180_b_result, self.pnl_180_b_result ]: self.set_text_widget(widget, "") def set_text_widget(self, widget, text): """设置文本框内容""" widget.config(state="normal") widget.delete(1.0, END) widget.insert(END, text) widget.config(state="disabled") def calculate(self): """执行风荷载计算并显示结果""" try: v = self.wind_speed.get() exposure = self.exposure_class.get() slope_str = self.slope.get() altitude = self.altitude.get() tilt_angle = self.tilt_angle.get() self.set_text_widget(self.wind_speed_result, f"{v} m/s") self.set_text_widget(self.exposure_result, exposure) self.set_text_widget(self.slope_result, slope_str) self.set_text_widget(self.altitude_result, f"{altitude} m") self.set_text_widget(self.tilt_angle_result, f"{tilt_angle}°") kz_values = {"B": 0.57, "C": 0.85, "D": 1.03} kz = kz_values[exposure] slope_percentage = int(slope_str.strip(&#39;%&#39;)) slope_values = {0: 1, 5: 1.08, 10: 1.16, 15: 1.362, 20: 1.691, 25: 2.15, 30: 2.15} kzt = slope_values[slope_percentage] ke = 1 - altitude * 0.0001147541 kd = 0.85 G = 1.0 self.set_text_widget(self.kz_result, str(kz)) self.set_text_widget(self.kzt_result, str(kzt)) self.set_text_widget(self.ke_result, f"{ke:.6f}") self.set_text_widget(self.kd_result, str(kd)) self.set_text_widget(self.G_result, str(G)) # 计算CNW和CNL cnw_0_case_a, cnl_0_case_a = self.get_cn_values(tilt_angle, 0, "A") cnw_0_case_b, cnl_0_case_b = self.get_cn_values(tilt_angle, 0, "B") cnw_180_case_a, cnl_180_case_a = self.get_cn_values(tilt_angle, 180, "A") cnw_180_case_b, cnl_180_case_b = self.get_cn_values(tilt_angle, 180, "B") # 计算风荷载标准值 pnw_0_case_a = 0.613 * kz * kzt * ke * kd * G * cnw_0_case_a * (v ** 2) / 1000 pnl_0_case_a = 0.613 * kz * kzt * ke * kd * G * cnl_0_case_a * (v ** 2) / 1000 pnw_0_case_b = 0.613 * kz * kzt * ke * kd * G * cnw_0_case_b * (v ** 2) / 1000 pnl_0_case_b = 0.613 * kz * kzt * ke * kd * G * cnl_0_case_b * (v ** 2) / 1000 pnw_180_case_a = 0.613 * kz * kzt * ke * kd * G * cnw_180_case_a * (v ** 2) / 1000 pnl_180_case_a = 0.613 * kz * kzt * ke * kd * G * cnl_180_case_a * (v ** 2) / 1000 pnw_180_case_b = 0.613 * kz * kzt * ke * kd * G * cnw_180_case_b * (v ** 2) / 1000 pnl_180_case_b = 0.613 * kz * kzt * ke * kd * G * cnl_180_case_b * (v ** 2) / 1000 # 显示计算结果 self.set_text_widget(self.cnw_0_a_result, str(cnw_0_case_a)) self.set_text_widget(self.cnl_0_a_result, str(cnl_0_case_a)) self.set_text_widget(self.pnw_0_a_result, f"{pnw_0_case_a:.4f} kN/m²") self.set_text_widget(self.pnl_0_a_result, f"{pnl_0_case_a:.4f} kN/m²") self.set_text_widget(self.cnw_0_b_result, str(cnw_0_case_b)) self.set_text_widget(self.cnl_0_b_result, str(cnl_0_case_b)) self.set_text_widget(self.pnw_0_b_result, f"{pnw_0_case_b:.4f} kN/m²") self.set_text_widget(self.pnl_0_b_result, f"{pnl_0_case_b:.4f} kN/m²") self.set_text_widget(self.cnw_180_a_result, str(cnw_180_case_a)) self.set_text_widget(self.cnl_180_a_result, str(cnl_180_case_a)) self.set_text_widget(self.pnw_180_a_result, f"{pnw_180_case_a:.4f} kN/m²") self.set_text_widget(self.pnl_180_a_result, f"{pnl_180_case_a:.4f} kN/m²") self.set_text_widget(self.cnw_180_b_result, str(cnw_180_case_b)) self.set_text_widget(self.cnl_180_b_result, str(cnl_180_case_b)) self.set_text_widget(self.pnw_180_b_result, f"{pnw_180_case_b:.4f} kN/m²") self.set_text_widget(self.pnl_180_b_result, f"{pnl_180_case_b:.4f} kN/m²") except Exception as e: self.clear_result_widgets() self.set_text_widget(self.wind_speed_result, f"计算出错: {str(e)}") self.set_text_widget(self.exposure_result, "") self.set_text_widget(self.slope_result, "") self.set_text_widget(self.altitude_result, "") self.set_text_widget(self.tilt_angle_result, "") def get_cn_values(self, tilt_angle, wind_direction, case_type): """根据倾角、风向角和case类型获取CNW和CNL值""" # 0度风向角 if wind_direction == 0: if tilt_angle < 7.5: if case_type == "A": return 1.2, 0.3 else: return -1.1, -0.1 elif tilt_angle == 7.5: if case_type == "A": return -0.6, -1.0 else: return -1.4, 0 elif tilt_angle == 15: if case_type == "A": return -0.9, -1.3 else: return -1.9, 0 elif tilt_angle == 22.5: if case_type == "A": return -1.5, -1.6 else: return -2.4, -0.3 elif tilt_angle == 30: if case_type == "A": return -1.8, -1.8 else: return -2.5, -0.5 elif tilt_angle == 37.5: if case_type == "A": return -1.8, -1.8 else: return -2.4, -0.6 elif tilt_angle == 45: if case_type == "A": return -1.6, -1.8 else: return -2.3, -0.7 else: angles = [7.5, 15, 22.5, 30, 37.5, 45] closest_angle = min(angles, key=lambda x: abs(x - tilt_angle)) return self.get_cn_values(closest_angle, wind_direction, case_type) # 180度风向角 elif wind_direction == 180: if tilt_angle < 7.5: if case_type == "A": return 1.2, 0.3 else: return -1.1, -0.1 elif tilt_angle == 7.5: if case_type == "A": return 0.9, 1.5 else: return 1.6, 0.3 elif tilt_angle == 15: if case_type == "A": return 1.3, 1.6 else: return 1.8, 0.6 elif tilt_angle == 22.5: if case_type == "A": return 1.7, 1.8 else: return 2.2, 0.7 elif tilt_angle == 30: if case_type == "A": return 2.1, 2.1 else: return 2.6, 1.0 elif tilt_angle == 37.5: if case_type == "A": return 2.1, 2.2 else: return 2.7, 1.1 elif tilt_angle == 45: if case_type == "A": return 2.2, 2.5 else: return 2.6, 1.4 else: angles = [7.5, 15, 22.5, 30, 37.5, 45] closest_angle = min(angles, key=lambda x: abs(x - tilt_angle)) return self.get_cn_values(closest_angle, wind_direction, case_type) def export_calculation_results(self): """导出计算结果到TXT文件""" # 检查是否已计算 if "请输入风速" in self.get_text_widget(self.wind_speed_result): self.show_message("请先进行计算") return # 打开文件夹选择对话框 folder_path = filedialog.askdirectory(title="选择保存计算书的文件夹") if not folder_path: return # 用户取消选择 try: # 构建文件路径 file_path = os.path.join(folder_path, "JSF.TXT") # 收集计算结果 result_text = self.generate_calculation_report() # 写入文件 with open(file_path, "w", encoding="utf-8") as f: f.write(result_text) self.show_message(f"计算书已成功保存至:\n{file_path}") except Exception as e: self.show_message(f"保存计算书时出错:\n{str(e)}") def generate_calculation_report(self): """生成计算报告文本""" # 收集输入参数 v = self.get_text_widget(self.wind_speed_result) exposure = self.get_text_widget(self.exposure_result) slope = self.get_text_widget(self.slope_result) altitude = self.get_text_widget(self.altitude_result) tilt_angle = self.get_text_widget(self.tilt_angle_result) # 收集中间系数 kz = self.get_text_widget(self.kz_result) kzt = self.get_text_widget(self.kzt_result) ke = self.get_text_widget(self.ke_result) kd = self.get_text_widget(self.kd_result) G = self.get_text_widget(self.G_result) # 收集0度风向角结果 cnw_0_a = self.get_text_widget(self.cnw_0_a_result) cnl_0_a = self.get_text_widget(self.cnl_0_a_result) pnw_0_a = self.get_text_widget(self.pnw_0_a_result) pnl_0_a = self.get_text_widget(self.pnl_0_a_result) cnw_0_b = self.get_text_widget(self.cnw_0_b_result) cnl_0_b = self.get_text_widget(self.cnl_0_b_result) pnw_0_b = self.get_text_widget(self.pnw_0_b_result) pnl_0_b = self.get_text_widget(self.pnl_0_b_result) # 收集180度风向角结果 cnw_180_a = self.get_text_widget(self.cnw_180_a_result) cnl_180_a = self.get_text_widget(self.cnl_180_a_result) pnw_180_a = self.get_text_widget(self.pnw_180_a_result) pnl_180_a = self.get_text_widget(self.pnl_180_a_result) cnw_180_b = self.get_text_widget(self.cnw_180_b_result) cnl_180_b = self.get_text_widget(self.cnl_180_b_result) pnw_180_b = self.get_text_widget(self.pnw_180_b_result) pnl_180_b = self.get_text_widget(self.pnl_180_b_result) # 生成报告内容 report = f"""美标风荷载计算书 ======================= 一、输入参数 ----------------------- 3秒时距风速: {v} 暴露等级: {exposure} 山地坡度: {slope} 海拔高度: {altitude} 光伏支架倾角: {tilt_angle} 二、中间计算参数 ----------------------- 速度压力暴露系数(kz): {kz} 山形系数(kzt): {kzt} 地面高程系数(ke): {ke} 风向因子(kd): {kd} 阵风效应系数(G): {G} 三、0度风向角计算结果 ----------------------- Case A: CNW: {cnw_0_a} CNL: {cnl_0_a} PNW: {pnw_0_a} PNL: {pnl_0_a} Case B: CNW: {cnw_0_b} CNL: {cnl_0_b} PNW: {pnw_0_b} PNL: {pnl_0_b} 四、180度风向角计算结果 ----------------------- Case A: CNW: {cnw_180_a} CNL: {cnl_180_a} PNW: {pnw_180_a} PNL: {pnl_180_a} Case B: CNW: {cnw_180_b} CNL: {cnl_180_b} PNW: {pnw_180_b} PNL: {pnl_180_b} ======================= 计算完成时间: {self.get_current_time()} """ return report def get_text_widget(self, widget): """获取文本框内容""" widget.config(state="normal") text = widget.get(1.0, END).strip() widget.config(state="disabled") return text def show_message(self, message): """显示消息对话框""" message_window = Toplevel(self.root) message_window.title("提示") message_window.geometry("300x150") message_window.resizable(False, False) # 居中显示 screen_width = message_window.winfo_screenwidth() screen_height = message_window.winfo_screenheight() x = (screen_width - 300) // 2 y = (screen_height - 150) // 2 message_window.geometry(f"+{x}+{y}") ttk.Label(message_window, text=message).pack(padx=20, pady=20) ttk.Button(message_window, text="确定", command=message_window.destroy).pack(pady=10) def get_current_time(self): """获取当前时间""" import datetime return datetime.datetime.now().strftime("%Y年%m月%d日 %H:%M:%S") if __name__ == "__main__": root = Tk() app = WindLoadCalculator(root) root.mainloop() 将其修改成page1.dart,去掉生成新文件功能,改成按键跳转一个计算书新界面result_page.dart,并将计算书生成到result_page.dart界面的一个控件中
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值