最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?tkinter庫入門與進(jìn)階之構(gòu)建精美用戶界面

 更新時(shí)間:2025年12月17日 08:40:41   作者:啊阿貍不會(huì)拉桿  
Tkinter是Python的標(biāo)準(zhǔn)GUI(圖形用戶界面)庫,基于Tcl/Tk構(gòu)建,無需額外安裝即可在大多數(shù)Python環(huán)境中使用,這篇文章主要介紹了Python?tkinter庫入門與進(jìn)階之構(gòu)建精美用戶界面的相關(guān)資料,需要的朋友可以參考下

前言

在 Python 的豐富生態(tài)中,tkinter 是標(biāo)準(zhǔn)的 GUI(圖形用戶界面)庫,它輕量、易用且功能強(qiáng)大,能讓開發(fā)者快速構(gòu)建出直觀、交互式的應(yīng)用程序。本文將帶你從零開始,逐步掌握 tkinter 的核心用法,從創(chuàng)建基礎(chǔ)窗口到設(shè)計(jì)美化且功能完備的用戶界面。

一、初識(shí) tkinter:創(chuàng)建第一個(gè)窗口

1. 導(dǎo)入庫與創(chuàng)建主窗口

import tkinter as tk
 
# 創(chuàng)建主窗口
root = tk.Tk()
# 設(shè)置窗口標(biāo)題
root.title("tkinter 入門示例")
# 設(shè)置窗口大小(寬x高)
root.geometry("400x300")
# 啟動(dòng)主循環(huán)
root.mainloop()

效果展示:

參數(shù)說明:

  • Tk(): 初始化主窗口的核心方法,所有 GUI 元素都構(gòu)建在此基礎(chǔ)上。

  • title(): 定義窗口標(biāo)題欄顯示的文本。

  • geometry(): 控制窗口的初始大小,字符串格式為"寬度x高度"。

  • mainloop(): 進(jìn)入事件監(jiān)聽循環(huán),等待用戶交互,如點(diǎn)擊、輸入等。

二、常用組件:構(gòu)建界面的積木

tkinter 提供了豐富多樣的組件,用于構(gòu)建各類用戶界面元素,以下是常用組件及其基本用法:

1. 標(biāo)簽(Label)

用于顯示文本或圖像,是界面中靜態(tài)信息的載體。

# 創(chuàng)建標(biāo)簽
label = tk.Label(root, text="歡迎使用 tkinter!", font=("宋體", 12))
# 將標(biāo)簽添加到窗口
label.pack(pady=10)  # pady 設(shè)置組件上下間距

效果展示:

參數(shù)解析:

  • text: 要顯示的文本內(nèi)容。

  • font: 字體設(shè)置,元組形式(字體名稱,字號(hào))。

  • pack(): 簡(jiǎn)單的幾何管理方法,自動(dòng)調(diào)整組件位置,默認(rèn)居中。

2. 按鈕(Button)

觸發(fā)特定操作的核心交互元素,點(diǎn)擊后可執(zhí)行指定函數(shù)。

# 定義按鈕點(diǎn)擊事件處理函數(shù)
def on_button_click():
    print("按鈕被點(diǎn)擊了!")
 
# 創(chuàng)建按鈕
button = tk.Button(root, text="點(diǎn)擊我", command=on_button_click)
button.pack(pady=5)

效果展示:

參數(shù)解析:

  • command: 指定按鈕點(diǎn)擊時(shí)調(diào)用的函數(shù),無需加括號(hào)。

3. 輸入框(Entry)

接收用戶輸入文本,常用于表單數(shù)據(jù)收集。

# 創(chuàng)建輸入框
entry = tk.Entry(root, width=30)
entry.pack(pady=5)

效果展示:

參數(shù)解析:

  • width: 輸入框的寬度,以字符數(shù)為單位。

4. 文本框(Text)

用于多行文本的輸入與顯示,比 Entry 更靈活。

# 創(chuàng)建文本框
text_box = tk.Text(root, height=5, width=30)
text_box.pack(pady=5)

效果展示:

參數(shù)解析:

  • height: 文本框的行數(shù)。

  • width: 寬度,以字符數(shù)計(jì)。

5. 單選按鈕(Radiobutton)

用于一組互斥選項(xiàng)的選擇,只能選其一。

# 定義變量存儲(chǔ)選中值
selected_radio = tk.StringVar()
 
# 創(chuàng)建單選按鈕
radio1 = tk.Radiobutton(root, text="選項(xiàng)一", variable=selected_radio, value="A")
radio2 = tk.Radiobutton(root, text="選項(xiàng)二", variable=selected_radio, value="B")
radio1.pack(); radio2.pack()

效果展示:

參數(shù)解析:

  • variable: 與該組單選按鈕關(guān)聯(lián)的變量,用于獲取選中值。

  • value: 每個(gè)單選按鈕對(duì)應(yīng)的值,選中時(shí)賦值給variable。

6. 復(fù)選框(Checkbutton)

允許多選,可同時(shí)勾選多個(gè)選項(xiàng)。

# 定義變量存儲(chǔ)勾選狀態(tài)
check_var = tk.BooleanVar()
 
# 創(chuàng)建復(fù)選框
checkbutton = tk.Checkbutton(root, text="勾選我", variable=check_var)
checkbutton.pack(pady=5)

效果展示:

參數(shù)解析:

  • variable: 通常為 BooleanVar 類型,表示勾選狀態(tài)(True/False)。

常用組件總結(jié)表

組件名稱用途核心參數(shù)示例代碼片段
Label顯示靜態(tài)文本或圖像text, fonttk.Label(root, text="示例")
Button觸發(fā)點(diǎn)擊事件text, commandtk.Button(root, text="點(diǎn)擊", command=func)
Entry單行文本輸入widthtk.Entry(root, width=20)
Text多行文本輸入與顯示height, widthtk.Text(root, height=5, width=30)
Radiobutton互斥選項(xiàng)選擇text, variable, valuetk.Radiobutton(...)
Checkbutton多選選項(xiàng)text, variabletk.Checkbutton(...)

三、幾何管理:精確定位組件

tkinter 提供了三種幾何管理方法,用于控制組件在窗口中的布局與位置,選擇合適的管理器是打造美觀界面的關(guān)鍵。

1. pack() 布局管理器

最簡(jiǎn)單的布局方式,按添加順序自動(dòng)排列組件,可設(shè)置填充、對(duì)齊方式等。

# 創(chuàng)建多個(gè)按鈕并用 pack() 排列
btn1 = tk.Button(root, text="按鈕1")
btn2 = tk.Button(root, text="按鈕2")
btn1.pack(side=tk.LEFT, padx=5)  # side 控制位置,padx 水平間距
btn2.pack(side=tk.RIGHT, padx=5)

效果展示:

常用參數(shù):

  • side: 組件放置方向(TOP, BOTTOM, LEFT, RIGHT)。

  • padx/pady: 水平/垂直方向的外部間距。

  • fill: 設(shè)置組件是否填充剩余空間(X, Y, BOTH)。

2. grid() 布局管理器

基于表格的布局方式,通過行和列精確控制組件位置,適合構(gòu)建表單等結(jié)構(gòu)化界面。

# 創(chuàng)建表單元素并用 grid() 定位
tk.Label(root, text="用戶名:").grid(row=0, column=0, padx=5, pady=5)
tk.Entry(root).grid(row=0, column=1, padx=5, pady=5)
tk.Label(root, text="密碼:").grid(row=1, column=0, padx=5, pady=5)
tk.Entry(root, show="*").grid(row=1, column=1, padx=5, pady=5)

常用參數(shù):

  • row: 組件所在的行號(hào)(從0開始)。

  • column: 組件所在的列號(hào)。

  • sticky: 對(duì)齊方式(N, S, E, W 及其組合)。

  • padx/pady: 單元格內(nèi)外邊距。

3. place() 布局管理器

通過絕對(duì)或相對(duì)坐標(biāo)定位組件,提供最精細(xì)的控制,但維護(hù)性較差,適合特殊布局需求。

# 使用 place() 絕對(duì)定位
tk.Button(root, text="絕對(duì)定位按鈕").place(x=50, y=50)

效果展示:

常用參數(shù):

  • x, y: 組件左上角的絕對(duì)坐標(biāo)(像素)。

  • relx, rely: 相對(duì)窗口寬度和高度的比例(0.0~1.0)。

  • anchor: 錨點(diǎn),控制組件的基準(zhǔn)位置(如CENTER, NW等)。

布局管理器選擇指南

  • 簡(jiǎn)單界面快速原型:優(yōu)先使用pack(),代碼簡(jiǎn)潔,自動(dòng)適應(yīng)窗口大小變化。

  • 表單、表格類結(jié)構(gòu)grid() 是最佳選擇,行列定位直觀,便于維護(hù)。

  • 復(fù)雜自定義布局:結(jié)合使用多種管理器,或在特定區(qū)域使用place()微調(diào)位置。

四、事件處理:讓界面動(dòng)起來

交互式界面的核心在于響應(yīng)用戶的操作,如點(diǎn)擊、鍵盤輸入等,這需要通過事件處理機(jī)制實(shí)現(xiàn)。

1. 綁定事件與處理函數(shù)

# 創(chuàng)建可點(diǎn)擊的標(biāo)簽
click_label = tk.Label(root, text="點(diǎn)擊我試試", bg="lightgray")
click_label.pack(pady=10)
 
# 定義鼠標(biāo)點(diǎn)擊事件處理函數(shù)
def on_label_click(event):
    print(f"標(biāo)簽被點(diǎn)擊了,坐標(biāo):({event.x}, {event.y})")
    click_label.config(text="被點(diǎn)擊了哦!")
 
# 綁定鼠標(biāo)左鍵點(diǎn)擊事件
click_label.bind("<Button-1>", on_label_click)

效果展示:

事件類型說明:

  • <Button-1>: 鼠標(biāo)左鍵點(diǎn)擊。

  • <ButtonRelease-1>: 鼠標(biāo)左鍵釋放。

  • <Double-Button-1>: 雙擊鼠標(biāo)左鍵。

  • <Enter>: 鼠標(biāo)進(jìn)入組件區(qū)域。

  • <Leave>: 鼠標(biāo)離開組件區(qū)域。

  • <Key>: 鍵盤按鍵按下。

2. 組件常用事件總結(jié)

事件類型觸發(fā)條件參數(shù)說明
<Button-1>鼠標(biāo)左鍵點(diǎn)擊event 對(duì)象含坐標(biāo)等信息
<ButtonRelease-1>鼠標(biāo)左鍵釋放同上
<Double-Button-1>雙擊鼠標(biāo)左鍵同上
<Enter>鼠標(biāo)進(jìn)入組件無特殊參數(shù)
<Leave>鼠標(biāo)離開組件無特殊參數(shù)
<Key>鍵盤按鍵按下event.char 獲取按鍵字符
<Configure>組件大小或位置改變width, height 等屬性

五、菜單欄與工具欄:提升專業(yè)度的界面元素

專業(yè)級(jí)應(yīng)用程序通常配備菜單欄和工具欄,它們?yōu)橛脩籼峁┍憬莸牟僮魅肟诤凸δ芙M織。

1. 創(chuàng)建菜單欄

# 創(chuàng)建菜單欄
menubar = tk.Menu(root)
 
# 創(chuàng)建文件菜單
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="新建", command=lambda: print("新建文件"))
file_menu.add_command(label="打開", command=lambda: print("打開文件"))
file_menu.add_separator()  # 添加分隔線
file_menu.add_command(label="退出", command=root.quit)
menubar.add_cascade(label="文件", menu=file_menu)
 
# 創(chuàng)建編輯菜單
edit_menu = tk.Menu(menubar, tearoff=0)
edit_menu.add_command(label="復(fù)制", command=lambda: print("復(fù)制操作"))
edit_menu.add_command(label="粘貼", command=lambda: print("粘貼操作"))
menubar.add_cascade(label="編輯", menu=edit_menu)
 
# 將菜單欄添加到窗口
root.config(menu=menubar)

效果展示:

2. 創(chuàng)建工具欄

# 創(chuàng)建工具欄框架
toolbar = tk.Frame(root, bg="lightgray", height=30)
toolbar.pack(side=tk.TOP, fill=tk.X)
 
# 添加工具按鈕
def add_tool_button(text, command):
    btn = tk.Button(toolbar, text=text, command=command, padx=5, pady=2)
    btn.pack(side=tk.LEFT)
 
add_tool_button("保存", lambda: print("保存操作"))
add_tool_button("撤銷", lambda: print("撤銷操作"))

效果展示:

菜單與工具欄設(shè)計(jì)要點(diǎn)

  • 菜單組織:按照功能模塊分組,常用操作放在頂層菜單。

  • 工具欄簡(jiǎn)化:僅放置最常用的功能按鈕,保持界面簡(jiǎn)潔。

  • 一致性:菜單項(xiàng)和工具欄按鈕的命名、圖標(biāo)風(fēng)格保持統(tǒng)一。

六、對(duì)話框:與用戶深度交互

對(duì)話框用于獲取用戶輸入、顯示消息或確認(rèn)操作,是增強(qiáng)用戶體驗(yàn)的重要手段。

1. 消息框

from tkinter import messagebox
 
# 顯示信息框
messagebox.showinfo("提示", "這是一個(gè)信息提示框!")
 
# 顯示警告框
messagebox.showwarning("警告", "這是一個(gè)警告提示框!")
 
# 顯示錯(cuò)誤框
messagebox.showerror("錯(cuò)誤", "這是一個(gè)錯(cuò)誤提示框!")
 
# 確認(rèn)對(duì)話框(返回布爾值)
result = messagebox.askyesno("確認(rèn)", "是否繼續(xù)操作?")
print("用戶選擇:", result)

效果展示:

2. 文件對(duì)話框

from tkinter import filedialog
 
# 打開文件對(duì)話框
file_path = filedialog.askopenfilename(
    title="選擇文件",
    filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
)
print("選擇的文件路徑:", file_path)
 
# 保存文件對(duì)話框
save_path = filedialog.asksaveasfilename(
    title="保存文件",
    defaultextension=".txt",
    filetypes=[("文本文件", "*.txt")]
)
print("保存的文件路徑:", save_path)

效果展示:

對(duì)話框類型與適用場(chǎng)景

對(duì)話框類型使用場(chǎng)景返回值示例
消息框(showinfo)提示成功、通知等信息None
警告框(showwarning)提示潛在風(fēng)險(xiǎn)、警告信息None
錯(cuò)誤框(showerror)報(bào)告錯(cuò)誤、異常情況None
確認(rèn)框(askyesno)需要用戶確認(rèn)是否的操作布爾值(True/False)
文件打開對(duì)話框選擇文件進(jìn)行導(dǎo)入、打開等操作選中文件的路徑字符串
文件保存對(duì)話框保存文件,指定保存位置和名稱用戶指定的保存路徑字符串

七、主題與樣式:美化界面的點(diǎn)睛之筆

tkinter 允許自定義組件的外觀,包括顏色、字體、邊框等,通過主題和樣式設(shè)置,可以打造個(gè)性化且美觀的用戶界面。

1. 設(shè)置全局樣式

# 配置全局樣式
style = {
    "font": ("微軟雅黑", 10),
    "bg": "#f0f0f0",  # 背景色
    "fg": "#333333",  # 前景色(文字顏色)
    "activebackground": "#e0e0e0",  # 鼠標(biāo)懸停時(shí)背景色
    "relief": tk.SOLID  # 邊框樣式
}
 
# 應(yīng)用到按鈕
tk.Button(root, text="樣式化按鈕", **style).pack(pady=10)

效果展示:

2. 創(chuàng)建主題化界面

# 創(chuàng)建主題框架
theme_frame = tk.LabelFrame(root, text="主題示例", padx=10, pady=10)
theme_frame.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
 
# 設(shè)置主題內(nèi)組件樣式
theme_style = {
    "font": ("楷體", 11),
    "bg": "#ffffff",
    "fg": "#2c3e50"
}
 
tk.Label(theme_frame, text="主題化標(biāo)簽", **theme_style).pack(anchor=tk.W)
tk.Entry(theme_frame, **theme_style).pack(fill=tk.X)

效果展示:

樣式設(shè)置進(jìn)階技巧

  • 字體統(tǒng)一:定義全局字體變量,集中管理應(yīng)用中的字體樣式和大小。

  • 顏色搭配:使用協(xié)調(diào)的色彩方案,如從設(shè)計(jì)工具中導(dǎo)出配色代碼。

  • 自定義組件類:將樣式參數(shù)封裝到組件類中,便于復(fù)用和維護(hù)。

八、綜合實(shí)戰(zhàn):構(gòu)建一個(gè)功能完備的界面

將上述知識(shí)融合,下面構(gòu)建一個(gè)包含多種組件、功能交互且界面美觀的應(yīng)用程序示例。

import tkinter as tk
from tkinter import messagebox, filedialog
from tkinter import ttk  # 導(dǎo)入ttk模塊獲取更現(xiàn)代的組件樣式
 
# 創(chuàng)建主窗口
root = tk.Tk()
root.title("tkinter 綜合示例")
root.geometry("800x600")
root.configure(bg="#f5f5f5")  # 設(shè)置窗口背景色
 
# ========== 菜單欄 ==========
menubar = tk.Menu(root)
 
# 文件菜單
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="新建", command=lambda: print("新建文件"))
file_menu.add_command(label="打開", command=lambda: print(f"打開文件: {filedialog.askopenfilename()}"))
file_menu.add_separator()
file_menu.add_command(label="退出", command=root.quit)
menubar.add_cascade(label="文件", menu=file_menu)
 
# 編輯菜單
edit_menu = tk.Menu(menubar, tearoff=0)
edit_menu.add_command(label="復(fù)制", command=lambda: print("復(fù)制操作"))
edit_menu.add_command(label="粘貼", command=lambda: print("粘貼操作"))
menubar.add_cascade(label="編輯", menu=edit_menu)
 
root.config(menu=menubar)
 
# ========== 工具欄 ==========
toolbar = tk.Frame(root, bg="#e0e0e0", height=40)
toolbar.pack(side=tk.TOP, fill=tk.X)
 
def add_tool_button(icon_path, text, command):
    btn = tk.Button(toolbar, text=text, command=command, compound=tk.TOP, padx=10, pady=5)
    btn.pack(side=tk.LEFT)
 
add_tool_button("", "保存", lambda: print("保存操作"))
add_tool_button("", "撤銷", lambda: print("撤銷操作"))
 
# ========== 主內(nèi)容區(qū) ==========
main_frame = tk.Frame(root, bg="#ffffff")
main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
 
# 左側(cè)輸入?yún)^(qū)
input_frame = tk.LabelFrame(main_frame, text="輸入?yún)^(qū)域", width=300, height=500)
input_frame.pack(side=tk.LEFT, padx=10, pady=10, fill=tk.BOTH)
input_frame.pack_propagate(False)  # 固定大小
 
tk.Label(input_frame, text="用戶名:").pack(anchor=tk.W, pady=5)
tk.Entry(input_frame, width=30).pack(fill=tk.X, padx=10)
 
tk.Label(input_frame, text="密碼:").pack(anchor=tk.W, pady=5)
tk.Entry(input_frame, show="*", width=30).pack(fill=tk.X, padx=10)
 
tk.Button(input_frame, text="登錄", command=lambda: messagebox.showinfo("登錄", "登錄按鈕被點(diǎn)擊")).pack(pady=10)
 
# 右側(cè)展示區(qū)
display_frame = tk.LabelFrame(main_frame, text="輸出區(qū)域", width=450, height=500)
display_frame.pack(side=tk.RIGHT, padx=10, pady=10, fill=tk.BOTH)
display_frame.pack_propagate(False)
 
output_text = tk.Text(display_frame, wrap=tk.WORD)
output_text.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
 
# 底部狀態(tài)欄
status_bar = tk.Label(root, text="就緒", bd=1, relief=tk.SUNKEN, anchor=tk.W)
status_bar.pack(side=tk.BOTTOM, fill=tk.X)
 
# ========== 運(yùn)行主循環(huán) ==========
root.mainloop()

效果展示:

九、進(jìn)階優(yōu)化與最佳實(shí)踐

在實(shí)際項(xiàng)目中,除了掌握基本用法,遵循一定的設(shè)計(jì)原則和優(yōu)化策略能讓 tkinter 應(yīng)用更高效、更專業(yè)。

1. 模塊化設(shè)計(jì)

將界面劃分為多個(gè)功能模塊,每個(gè)模塊獨(dú)立開發(fā),最后組合到主窗口,便于團(tuán)隊(duì)協(xié)作和代碼維護(hù)。

# 獨(dú)立模塊示例:login_ui.py
def create_login_frame(parent):
    frame = tk.LabelFrame(parent, text="登錄")
    tk.Label(frame, text="用戶名:").grid(row=0, column=0, padx=5, pady=5)
    tk.Entry(frame).grid(row=0, column=1, padx=5, pady=5)
    tk.Label(frame, text="密碼:").grid(row=1, column=0, padx=5, pady=5)
    tk.Entry(frame, show="*").grid(row=1, column=1, padx=5, pady=5)
    tk.Button(frame, text="登錄").grid(row=2, columnspan=2, pady=10)
    return frame

2. 響應(yīng)式布局

通過合理的布局管理器配置,使界面能自適應(yīng)不同屏幕尺寸,提升用戶體驗(yàn)。

# 設(shè)置行和列的權(quán)重,使組件隨窗口大小變化而伸縮
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

3. 錯(cuò)誤處理與日志記錄

在用戶交互密集的應(yīng)用中,完善的錯(cuò)誤處理機(jī)制能有效提升穩(wěn)定性。

try:
    # 可能引發(fā)異常的操作
    risky_operation()
except Exception as e:
    messagebox.showerror("錯(cuò)誤", f"操作失敗: {str(e)}")
    # 記錄日志便于后續(xù)分析
    with open("error.log", "a") as log_file:
        log_file.write(f"Error occurred: {str(e)}\n")

十、總結(jié)與展望

通過本文的系統(tǒng)學(xué)習(xí),我們從創(chuàng)建基礎(chǔ)窗口開始,逐步掌握了 tkinter 中各類組件的使用方法、布局管理技巧、事件處理機(jī)制以及界面美化策略,最終構(gòu)建出一個(gè)功能完備且美觀的綜合示例。在 Python 的 GUI 開發(fā)領(lǐng)域,tkinter 是入門的不二之選,它不僅能快速滿足日常工具開發(fā)的需求,更是深入學(xué)習(xí)其他高級(jí) GUI 框架(如 PyQt、wxPython 等)的基石。

未來,隨著應(yīng)用程序復(fù)雜度的提升,你可以進(jìn)一步探索以下方向:

  • 集成第三方庫:結(jié)合 Matplotlib 實(shí)現(xiàn)數(shù)據(jù)可視化,或使用 Pillow 處理圖像資源。

  • 多線程與異步操作:優(yōu)化長(zhǎng)時(shí)間運(yùn)行的任務(wù),防止界面卡頓。

  • 國際化與本地化:支持多語言界面,拓展應(yīng)用受眾范圍。

  掌握 tkinter,就是為你的 Python 開發(fā)之旅裝備了一把多功能瑞士軍刀,無論是快速原型構(gòu)建還是小型桌面應(yīng)用開發(fā),都能得心應(yīng)手。文章附上tkinter計(jì)算器.py供讀者參考學(xué)習(xí)。展示效果如下。

到此這篇關(guān)于Python tkinter庫入門與進(jìn)階之構(gòu)建精美用戶界面的文章就介紹到這了,更多相關(guān)Python tkinter庫用戶界面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

屯门区| 平舆县| 兴城市| 拜城县| 安西县| 湾仔区| 广河县| 普陀区| 新津县| 深州市| 万源市| 浮山县| 普兰店市| 云浮市| 肇东市| 陕西省| 固始县| 白沙| 绥宁县| 噶尔县| 桃园市| 昌平区| 玉屏| 广东省| 靖边县| 镇坪县| 京山县| 南江县| 西平县| 阿图什市| 舟曲县| 嵊州市| 寿阳县| 新竹市| 林甸县| 民乐县| 浪卡子县| 宣武区| 大埔县| 新河县| 江口县|