首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何对齐GUI程序中的标签和输入框?

如何对齐GUI程序中的标签和输入框?
EN

Stack Overflow用户
提问于 2018-05-18 08:35:05
回答 3查看 3.5K关注 0票数 1

我试图用Python创建一个简单的GUI程序,但我很难将程序的标签对齐,以便每个单词的第一个字母彼此排列。我试着使用anchor="nw"anchor="w",但它们似乎没有起作用。我也有一个困难的时间让输入框对齐彼此。我的代码以及预期的GUI都附在了上面。如果有人有建议,请告诉我。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tkinter

class Loan:
    def __init__(self):
        #Create main Window
        self.main_window = tkinter.Tk()
        self.main_window.title("Loan Calculator")

        #Create the six frames
        self.intRate_frame = tkinter.Frame(self.main_window)
        self.numYears_frame = tkinter.Frame(self.main_window)
        self.loanAmount_frame = tkinter.Frame(self.main_window)
        self.monthlyPayment_frame = tkinter.Frame(self.main_window)
        self.totalPayment_frame = tkinter.Frame(self.main_window)
        self.button_frame = tkinter.Frame(self.main_window)

        # Create and pack the widgets for interest rate
        self.intRate_label = tkinter.Label(self.intRate_frame, \
                text='Annual Interest Rate', anchor="w")
        self.intRate_entry = tkinter.Entry(self.intRate_frame, \
                                 width=20)
        self.intRate_label.pack(side='left')
        self.intRate_entry.pack(side='left')

        #Create and pack the widgets for number of years
        self.numYears_label = tkinter.Label(self.numYears_frame, \
                text='Number of Years', anchor = "w")
        self.numYears_entry = tkinter.Entry(self.numYears_frame, \
                                 width=20)
        self.numYears_label.pack(side='left')
        self.numYears_entry.pack(side='left')


        #Create and pack the widgets for loan Amount
        self.loanAmount_label = tkinter.Label(self.loanAmount_frame, \
                text='Loan Amount', anchor = "nw")
        self.loanAmount_entry = tkinter.Entry(self.loanAmount_frame, \
                                 width=20)
        self.loanAmount_label.pack(side='left')
        self.loanAmount_entry.pack(side='left')

        #Create and pack the widgets for monthly payment
        self.result_label = tkinter.Label(self.monthlyPayment_frame, \
                text='Monthly Payment', anchor="w")
        self.monthlyPayment = tkinter.StringVar() # To update avg_label
        self.monthlyPayment_label = tkinter.Label(self.monthlyPayment_frame, \
                            textvariable=self.monthlyPayment)
        self.result_label.pack(side='left')
        self.monthlyPayment_label.pack(side='left')

        #Create and pack the widgets for total payment
        self.result2_label = tkinter.Label(self.totalPayment_frame, \
                text='Total Payment', anchor="w")
        self.totalPayment = tkinter.StringVar() # To update avg_label
        self.totalPayment_label = tkinter.Label(self.totalPayment_frame, \
                            textvariable=self.totalPayment)
        self.result2_label.pack(side='left')
        self.totalPayment_label.pack(side='left')

        #Create and pack the widgets for the button widgets
        self.compute_button = tkinter.Button(self.button_frame, \
                             text='Compute Payment', command=self.calc)
        self.compute_button.pack(side='left')

        self.intRate_frame.pack()
        self.numYears_frame.pack()
        self.loanAmount_frame.pack()
        self.monthlyPayment_frame.pack()
        self.totalPayment_frame.pack()
        self.button_frame.pack()

        tkinter.mainloop()

    def calc(self):
        #Get 
        self.intRate = float(self.intRate_entry.get())
        self.numYears = float(self.numYears_entry.get())
        self.loanAmount = float(self.loanAmount_entry.get())
        #Calculations
        monthlyIntRate = self.intRate / 1200   
        monthlyPayment = self.loanAmount * monthlyIntRate/(1 - (1 / (1 +     [enter image description here][1]monthlyIntRate) ** (self.numYears * 12))) 
        totalPayment = self.monthlyPayment * self.numYears * 12 #calculates the total payment

        self.monthlyPayment.set(self.monthlyPayment)
        self.totalPayment.set(self.totalPayment)


loan1 = Loan()

预期GUI:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-18 09:26:26

主要问题来自于您使用的框架:它们从不打包。因此,打包并设置以下选项:fill='both'

有时,您还会将同一帧的两个小部件打包到left中,而不是将其中一个小部件设置为left,另一个小部件设置为right

您还需要对文本使用justify='right',以便在每个条目小部件的右侧显示。

下面是演示的代码(需要清理):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tkinter

class Loan:
    def __init__(self):
        #Create main Window
        self.main_window = tkinter.Tk()
        self.main_window.title("Loan Calculator")

        #Create the six frames
        self.intRate_frame = tkinter.Frame(self.main_window)
        self.intRate_frame.pack()
        self.numYears_frame = tkinter.Frame(self.main_window)
        self.numYears_frame.pack(fill='both')
        self.loanAmount_frame = tkinter.Frame(self.main_window)
        self.loanAmount_frame.pack(fill='both')
        self.monthlyPayment_frame = tkinter.Frame(self.main_window)
        self.monthlyPayment_frame.pack(fill='both')
        self.totalPayment_frame = tkinter.Frame(self.main_window)
        self.totalPayment_frame.pack(fill='both')
        self.button_frame = tkinter.Frame(self.main_window)
        self.button_frame.pack(fill='both')

        # Create and pack the widgets for interest rate
        self.intRate_label = tkinter.Label(self.intRate_frame, \
                text='Annual Interest Rate',  anchor="w")
        self.intRate_entry = tkinter.Entry(self.intRate_frame, \
                                 width=20, justify='right')

        self.intRate_label.pack(side='left')
        self.intRate_entry.pack(side='left')

        #Create and pack the widgets for number of years
        self.numYears_label = tkinter.Label(self.numYears_frame, text='Number of Years')
        self.numYears_entry = tkinter.Entry(self.numYears_frame, justify='right')
        self.numYears_label.pack(side='left')
        self.numYears_entry.pack(side='right')


        #Create and pack the widgets for loan Amount
        self.loanAmount_label = tkinter.Label(self.loanAmount_frame, \
                text='Loan Amount', anchor = "nw")
        self.loanAmount_entry = tkinter.Entry(self.loanAmount_frame, \
                                 width=20, justify='right')
        self.loanAmount_label.pack(side='left')
        self.loanAmount_entry.pack(side='right')

        #Create and pack the widgets for monthly payment
        self.result_label = tkinter.Label(self.monthlyPayment_frame, \
                text='Monthly Payment', anchor="w")
        self.monthlyPayment = tkinter.StringVar() 
        self.monthlyPayment_label = tkinter.Label(self.monthlyPayment_frame, \
                            textvariable=self.monthlyPayment)
        self.result_label.pack(side='left')
        self.monthlyPayment_label.pack(side='right')

        #Create and pack the widgets for total payment
        self.result2_label = tkinter.Label(self.totalPayment_frame, \
                text='Total Payment', anchor="w")
        self.totalPayment = tkinter.StringVar() 
        self.totalPayment_label = tkinter.Label(self.totalPayment_frame, \
                            textvariable=self.totalPayment)
        self.result2_label.pack(side='left')
        self.totalPayment_label.pack(side='left')

        #Create and pack the widgets for the button widgets
        self.compute_button = tkinter.Button(self.button_frame, \
                             text='Compute Payment', command=self.calc)
        self.compute_button.pack(side='right')

        self.intRate_frame.pack()
        self.numYears_frame.pack()
        self.loanAmount_frame.pack()
        self.monthlyPayment_frame.pack()
        self.totalPayment_frame.pack()
        self.button_frame.pack()

        tkinter.mainloop()

    def calc(self):
        #Get 
        self.intRate = float(self.intRate_entry.get())
        self.numYears = float(self.numYears_entry.get())
        self.loanAmount = float(self.loanAmount_entry.get())
        #Calculations
        monthlyIntRate = self.intRate / 1200   
        monthlyPayment = self.loanAmount * monthlyIntRate/(1 - (1 / (1 +     monthlyIntRate) ** (self.numYears * 12))) 
        totalPayment = self.monthlyPayment * self.numYears * 12 #calculates the total payment

        self.monthlyPayment.set(self.monthlyPayment)
        self.totalPayment.set(self.totalPayment)


loan1 = Loan()

演示( Ubuntu):

票数 0
EN

Stack Overflow用户

发布于 2018-05-18 09:05:52

尝试包装框架,或不使用它们。框架用于将小部件分组在一起。您也可以使用“锚”和“侧”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tkinter

class Loan:
    def __init__(self):
        #Create main Window
        self.main_window = tkinter.Tk()
        self.main_window.title("Loan Calculator")

        #make a frame for alignment
        self.entry_frame =  tkinter.Frame(self.main_window)
        self.entry_frame.pack(side="right", anchor="n")

        # Create and pack the widgets for interest rate
        self.intRate_label = tkinter.Label(self.main_window, \
                text='Annual Interest Rate', anchor="w")
        self.intRate_entry = tkinter.Entry(self.entry_frame, \
                                 width=20)
        self.intRate_label.pack(side="top", anchor="w")
        self.intRate_entry.pack(side="top", anchor="w", pady=1)

        #Create and pack the widgets for number of years
        self.numYears_label = tkinter.Label(self.main_window, \
                text='Number of Years', anchor = "w")
        self.numYears_entry = tkinter.Entry(self.entry_frame, \
                                 width=20)
        self.numYears_label.pack(side="top", anchor="w")
        self.numYears_entry.pack(side="top", anchor="w",  pady=1)


        #Create and pack the widgets for loan Amount
        self.loanAmount_label = tkinter.Label(self.main_window, \
                text='Loan Amount', anchor = "nw")
        self.loanAmount_entry = tkinter.Entry(self.entry_frame, \
                                 width=20)
        self.loanAmount_label.pack(side="top", anchor="w")
        self.loanAmount_entry.pack(side="top", anchor="w", pady=1)

        #pack the frame
        #self.entry_frame.pack(side="top", anchor="e")

        #Create and pack the widgets for monthly payment
        self.result_label = tkinter.Label(self.main_window, \
                text='Monthly Payment', anchor="w")
        self.monthlyPayment = tkinter.StringVar() # To update avg_label
        self.monthlyPayment_label = tkinter.Label(self.main_window, \
                            textvariable=self.monthlyPayment)
        self.result_label.pack(side="top", anchor="w")
        self.monthlyPayment_label.pack(side="top", anchor="w")

        #Create and pack the widgets for total payment
        self.result2_label = tkinter.Label(self.main_window, \
                text='Total Payment', anchor="w")
        self.totalPayment = tkinter.StringVar() # To update avg_label
        self.totalPayment_label = tkinter.Label(self.main_window, \
                            textvariable=self.totalPayment)
        self.result2_label.pack(side="top", anchor="w")
        self.totalPayment_label.pack(side="top", anchor="w")

        #Create and pack the widgets for the button widgets
        self.compute_button = tkinter.Button(self.main_window, \
                             text='Compute Payment', command=self.calc)
        self.compute_button.pack(side="top")

        tkinter.mainloop()

    def calc(self):
        #Get 
        self.intRate = float(self.intRate_entry.get())
        self.numYears = float(self.numYears_entry.get())
        self.loanAmount = float(self.loanAmount_entry.get())
        #Calculations
        monthlyIntRate = self.intRate / 1200   
        monthlyPayment = self.loanAmount * monthlyIntRate/(1 - (1 / (1) ** (self.numYears * 12))) 
        totalPayment = self.monthlyPayment * self.numYears * 12 #calculates the total payment

        self.monthlyPayment.set(self.monthlyPayment)
        self.totalPayment.set(self.totalPayment)


loan1 = Loan()

我为所有的入口添加了一个框架,使它们聚在一起。

票数 2
EN

Stack Overflow用户

发布于 2018-05-18 08:39:08

你应该尝试用grid()函数来包装你的小部件.它在定位上要灵活得多

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tkinter
from tkinter import *

class Loan:
    def __init__(self):
        #Create main Window
        self.main_window = tkinter.Tk()
        self.main_window.title("Loan Calculator")

        #Create the six frames
        self.intRate_frame = tkinter.Frame(self.main_window)
        self.numYears_frame = tkinter.Frame(self.main_window)
        self.loanAmount_frame = tkinter.Frame(self.main_window)
        self.monthlyPayment_frame = tkinter.Frame(self.main_window)
        self.totalPayment_frame = tkinter.Frame(self.main_window)
        self.button_frame = tkinter.Frame(self.main_window)

        # Create and pack the widgets for interest rate
        self.intRate_label = tkinter.Label(self.intRate_frame, \
                text='Annual Interest Rate', anchor="w")
        self.intRate_entry = tkinter.Entry(self.intRate_frame, \
                                 width=20)
        self.intRate_label.grid(row=0, column=0, sticky=W)
        self.intRate_entry.grid(row=0, column=1, sticky=W)

        #Create and pack the widgets for number of years
        self.numYears_label = tkinter.Label(self.numYears_frame, \
                text='Number of Years', anchor = "w")
        self.numYears_entry = tkinter.Entry(self.numYears_frame, \
                                 width=20)
        self.numYears_label.grid(row=1, column=0, sticky=W)
        self.numYears_entry.grid(row=1, column=1, sticky=W)


        #Create and pack the widgets for loan Amount
        self.loanAmount_label = tkinter.Label(self.loanAmount_frame, \
                text='Loan Amount', anchor = "nw")
        self.loanAmount_entry = tkinter.Entry(self.loanAmount_frame, \
                                 width=20)
        self.loanAmount_label.grid(row=2, column=0, sticky=W)
        self.loanAmount_entry.grid(row=2, column=1, sticky=W)

        #Create and pack the widgets for monthly payment
        self.result_label = tkinter.Label(self.monthlyPayment_frame, \
                text='Monthly Payment', anchor="w")
        self.monthlyPayment = tkinter.StringVar() # To update avg_label
        self.monthlyPayment_label = tkinter.Label(self.monthlyPayment_frame, \
                            textvariable=self.monthlyPayment)
        self.result_label.grid(row=3, column=0, sticky=W)
        self.monthlyPayment_label.grid(row=3, column=1, sticky=W)

        #Create and pack the widgets for total payment
        self.result2_label = tkinter.Label(self.totalPayment_frame, \
                text='Total Payment', anchor="w")
        self.totalPayment = tkinter.StringVar() # To update avg_label
        self.totalPayment_label = tkinter.Label(self.totalPayment_frame, \
                            textvariable=self.totalPayment)
        self.result2_label.grid(row=4, column=0, sticky=W)
        self.totalPayment_label.grid(row=1, column=1, sticky=W)

        #Create and pack the widgets for the button widgets
        self.compute_button = tkinter.Button(self.button_frame, \
                             text='Compute Payment', command=self.calc)
        self.compute_button.pack(side='left')

        self.intRate_frame.grid(row=1, column=1, sticky=W)
        self.numYears_frame.grid(row=2, column=1, sticky=W)
        self.loanAmount_frame.grid(row=3, column=1, sticky=W)
        self.monthlyPayment_frame.grid(row=4, column=1, sticky=W)
        self.totalPayment_frame.grid(row=5, column=1, sticky=W)
        self.button_frame.grid(row=6, column=1, sticky=W)

        tkinter.mainloop()

    def calc(self):
        #Get 
        self.intRate = float(self.intRate_entry.get())
        self.numYears = float(self.numYears_entry.get())
        self.loanAmount = float(self.loanAmount_entry.get())
        #Calculations
        monthlyIntRate = self.intRate / 1200
        monthlyPayment = self.loanAmount * monthlyIntRate/(1 - (1 / (1 +     [enter image description here][1]monthlyIntRate) ** (self.numYears * 12))) 
        totalPayment = self.monthlyPayment * self.numYears * 12 #calculates the total payment
        self.monthlyPayment.set(self.monthlyPayment)
        self.totalPayment.set(self.totalPayment)


loan1 = Loan()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50415752

复制
相关文章
nodejs写入json文件_json文件可以删除吗
哈喽!nodejs的文件系统,接触过node的对node的文件系统肯定不会陌生,这两天我就在思考一个问题,我是否可以在本地操作我的本地json文件,这样一个本地的文本数据库就有了,如果是便签之类,记录的软件,我完全可以不用连后台的数据库,我可以自己操作本地的json文件,自己用node写后台,答案是肯定的,下面我们就一起来实现一下吧,对本地json文件的增、删、改、查
全栈程序员站长
2022/11/04
2.9K0
nodejs写入json文件_json文件可以删除吗
Unity通用渲染管线(URP)系列(十五)——粒子(Color and Depth Textures)
这是有关创建自定义脚本渲染管线的系列教程的第15部分。我们将基于颜色和深度纹理来创建基于深度的淡入和扭曲粒子。
放牛的星星
2021/01/11
4.8K0
Unity通用渲染管线(URP)系列(十五)——粒子(Color and Depth Textures)
typecho附件页面可以评论,那么如何找到别人的附件页面地址呢?
前言 typecho的附件其实和文章性质一样,附件也有单独的页面,也可以进行评论,附件页面的地址格式如https://zezeshe.com/attachment/1293/,1293就是附件的id,其实文章id和附件id是同一个东西,所以有的时候发布文章时id,文章id并不连贯。
泽泽社长
2023/04/17
5060
【Android 安装包优化】Tint 着色器 ( 简介 | 布局文件中的 Tint 着色器基本用法 | 代码中使用 Tint 着色器添加颜色效果 )
Tint 着色器的作用是是 可以使图片变色 , 使用该机制可以显示不同颜色的图片 ;
韩曙亮
2023/03/29
1.7K0
【Android 安装包优化】Tint 着色器 ( 简介 | 布局文件中的 Tint 着色器基本用法 | 代码中使用 Tint 着色器添加颜色效果 )
使用Python写入docx文件并控制字体颜色
背景知识:docx文件的结构分为三层,1、Docment对象表示整个文档;2、Docment包含了Paragraph对象的列表,每个Paragraph对象用来表示文档中的一个段落;3、一个Paragr
Python小屋屋主
2018/04/16
2.2K0
使用Python写入docx文件并控制字体颜色
OpenGL ES 3.0 深度测试(OC)(二)
本文章是基于文章一,开始讲解的。 效果就是个3D的正方体的盒子。 如果实现这个效果需要的步骤: 1.创建窗口 2.初始化环境(Context) 3.申请缓存区(渲染缓存,深度测试,帧缓存) 4.加载着色器关联链接程序 5.设置顶点 6.加载纹理 7.渲染 其中,创建窗口,初始化环境(Context),申请缓存区(渲染缓存,帧缓存),加载着色器关联链接程序,设置顶点,加载纹理。 这几个步骤同文章一,下面主要讲解下申请缓存区(深度测试),和渲染的步骤。
大壮
2020/06/22
9830
WebGPU 入门:绘制一个三角形
今天我们来入门 WebGPU,来写一个图形版本的 Hello World,即绘制一个三角形。
前端西瓜哥
2023/09/24
4530
WebGPU 入门:绘制一个三角形
main方法可以重载吗?可以被其他方法调用吗?可以继承吗?
不过自 JDK1.5 引入动态参数后,String[]数组也可以使用String... args来实现。
4xx.me
2022/06/10
1.6K0
基于发行版本内核打造自己的内核
Linux当中最核心的部分就是内核,这个也是最基础,最可能被忽视的一部分,随便找一个刚入职的运维,学习个两三天,网上找些资料也能能自己安装编译内核了,很多运维的初期培训就是做的这些学习,为什么在网上已经有这么多文章的情况下,还要写一篇关于内核的文章,这是因为,我想讲的是如何去选择内核 一般来说,找内核的时候都会去下面这个网站进行选择
用户2772802
2018/08/06
7910
基于发行版本内核打造自己的内核
[编程题] 彩色瓷砖分析代码
牛牛喜欢彩色的东西,尤其是彩色的瓷砖。牛牛的房间内铺有L块正方形瓷砖。每块砖的颜色有四种可能:红、绿、蓝、黄。给定一个字符串S, 如果S的第i个字符是'R', 'G', 'B'或'Y',那么第i块瓷砖的颜色就分别是红、绿、蓝或者黄。 牛牛决定换掉一些瓷砖的颜色,使得相邻两块瓷砖的颜色均不相同。请帮牛牛计算他最少需要换掉的瓷砖数量。
desperate633
2018/08/22
9040
基于Element-ui的颜色选取器,增加最近使用的颜色。
拿我格子衫来
2023/08/24
4100
基于Element-ui的颜色选取器,增加最近使用的颜色。
一看就懂的 OpenGL 基础概念(4):各种 O 之 FBO丨音视频基础
这个公众号会路线图式的遍历分享音视频技术:音视频基础 → 音视频工具 → 音视频工程示例 → 音视频工业实战。关注一下成本不高,错过干货损失不小 ↓↓↓
关键帧
2022/11/29
2.1K0
一看就懂的 OpenGL 基础概念(4):各种 O 之 FBO丨音视频基础
OpenGL 抗锯齿
在你的渲染大冒险中,你可能会遇到模型边缘有锯齿的问题。锯齿边(Jagged Edge)出现的原因是由顶点数据像素化之后成为片段的方式所引起的。下面是一个简单的立方体,它体现了锯齿边的效果:
字节流动
2021/08/10
2.9K0
OpenGL 抗锯齿
基于飞桨复现语义分割网络HRNet,实现瓷砖缺陷检测
PaddleSeg是基于PaddlePaddle开发的图像分割开发套件,覆盖了DeepLabv3+、U-Net、ICNet、PSPNet、HRNet、Fast-SCNN等主流分割网络。通过模块化的设计,以配置化方式驱动模型组合,帮助开发者更便捷地完成从训练到部署的全流程图像分割应用。
用户1386409
2020/11/06
1.3K0
基于飞桨复现语义分割网络HRNet,实现瓷砖缺陷检测
WebGL,真正进入三维的世界
一、在此之前 在之前的文章中,我想大家已经对WebGL有了一个大体的了解,不过为了凑字数,我在这篇文章的开头再稍微回顾一下,如果我们需要使用WebGL来绘制图像需要走完以下这五步: 1、从canvas
周明礼
2017/05/17
8.9K2
WebGL,真正进入三维的世界
【前端代码】基于canvas的纯JS二维码生成,可以控制尺寸、颜色
qrious是一款基于HTML5 canvas的纯JS二维码生成插件。通过qrious.js可以快速生成各种二维码,你可以控制二维码的尺寸颜色,还可以将生成的二维码进行Base64编码。
用户5997198
2022/03/28
2.1K0
【前端代码】基于canvas的纯JS二维码生成,可以控制尺寸、颜色
JS的分号可以省掉吗?
摘要: JavaScript语言从设计之初就是考虑带分号的,使用不带分号的编码规则就要小心点啦。
Fundebug
2018/09/18
9.1K2
JS的分号可以省掉吗?
Linux的中断可以嵌套吗?
老的Linux内核中,如果一个中断服务程序不想被别的中断打断,我们能看到这样的代码:
Linux阅码场
2019/10/08
5.4K0
Linux的中断可以嵌套吗?
chatgpt可以赚钱吗
GPT-3 本身并没有直接的盈利模式,因为它是由 OpenAI 开发并公开发布的一个自然语言生成模型,可以免费使用。但是,GPT-3 可以作为一个关键技术与商业应用结合,从而带来盈利。以下是 GPT-3 可能的赚钱方式:
疯狂的KK
2023/03/17
1.4K0
Unity Shader
对于透明物体的处理,是游戏引擎的一个重要能力,通常通过模型的 透明通道 alpha 来控制物体的透明情况,alpha取值范围为
ruochen
2021/11/26
3.4K0

相似问题

大型集合的慢速查询

11

节点JS中大型MongoDB数据库的慢速加载

14

大型表上的慢速MySQL选择

21

慢速网络中的大型RabbitMQ消息

28

Heroku慢速加载

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文