偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python 升級之路 ( Lv19 ) GUI 編程

開發(fā) 后端
今天我們將深入學(xué)習(xí) GUI 圖形界面編程 tkinter,了解基礎(chǔ)組件的使用方式。

今天我們將深入學(xué)習(xí)GUI圖形界面編程tkinter, 了解基礎(chǔ)組件的使用方式。

tkinter基礎(chǔ)組件

在登上天維巨獸身上的時候, 了不起大吃一驚. 作為堪比一個島嶼的存在, 這個生物的身上好像蘊藏著無數(shù)的奧秘. 可是剛一下來迎接他們的不是鮮花和掌聲, 而是一把匕首. GBK教信徒蜂擁而至, 由于大家事先都知道這些信徒是被控制的, 因此都特意留手. 盡量都將其擊暈, 然后由奧菲利亞通過使用凈化魔法來解決. 花費了近一天的時間, 才將近百名被控制的信徒解救成功. 然后在恢復(fù)意識的信徒的帶領(lǐng)下, 了不起進入到了神殿外圍的核心地區(qū). 這里有GBL的大祭司和大神官, 也是奧菲利亞昔日的朋友...

Label 標(biāo)簽

Label(標(biāo)簽)主要用于顯示文本信息,也可以顯示圖像。

常用屬性:

  • width,height: 用于指定區(qū)域大小 如果顯示是文本,則以單個英文字符大小為單位(一個漢字寬度占 2 個字符位置,高度和英文字符一樣);如果顯示是圖像,則以像素為單位。默認值是 根據(jù)具體顯示的內(nèi)容動態(tài)調(diào)整
  • font: 指定字體和字體大小. 如:font = (font_name,size)
  • image: 顯示在 Label 上的圖像,目前 tkinter 只支持 gif 格式
  • fg 和 bg: fg(foreground):前景色、bg(background):背景色
  • justify: 針對多行文字的對齊,可設(shè)置 justify 屬性,可選值"left", "center" or "right"

實操代碼:

"""測試 Label 組件的基本用法,使用面向?qū)ο蟮姆绞?""
from tkinter import *


class Application(Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """創(chuàng)建組件"""
        self.label01 = Label(self, text="點擊label", width=10, height=2, bg="black", fg="white")
        self.label01["text"] = "第一個Label"
        self.label01.config(fg="red", bg="green")
        self.label01.pack()

        self.label02 = Label(self, text="第二個Label", width=10, height=2, bg="blue", fg="white", font=("黑體", 30))
        self.label02.pack()

        # 顯示圖像
        global photo    # 把 photo 聲明成全局變量. 如果是局部變量,本方法執(zhí)行完畢后,圖像對象銷毀,窗口顯示不出圖像
        photo = PhotoImage(file="111.gif")
        self.label03 = Label(self, image=photo)
        self.label03.pack()  # 在父小部件中打包一個小部件

        self.label04 = Label(self, text="第一行\(zhòng)n 第二行\(zhòng)n 第三行", borderwidth=5, relief="groove", justify="right")
        self.label04.pack()


if __name__ == "__main__":
    root = Tk()
    root.geometry("600x600+810+330")
    root.title("測試Label")
    app = Application(master=root)
    root.mainloop()

注意:

  • Label(標(biāo)簽)主要用于顯示文本信息,也可以顯示圖像
  • pack 按照組件的創(chuàng)建順序?qū)⒆咏M件添加到父組件中,按照垂直或者水平的方向自然排布 如果不指定任何選項,默認在父組件中自頂向下垂直添加組件. pack 是代碼量最少最簡單的一種,可以用于快速生成界面.

Options 選項詳解

通過學(xué)習(xí) Label 組件,我們發(fā)現(xiàn)可以通過 Options 設(shè)置組件的屬性,從而控制組件的各種狀態(tài). 比如:寬度、高度、顏色、位置等等。

可以通過以下三種方式設(shè)置 Options 選項,這在各種 GUI 組件中用法都一致:

  • 創(chuàng)建對象時,使用可變參數(shù)fred = Button(self, fg="red", bg="blue")
  • 創(chuàng)建對象后,使用字典索引方式
fred["fg"] = "red"
fred["bg"] = "blue"
  • 創(chuàng)建對象后,使用 config()方法 fred.config(fg="red", bg="blue")

如何查看組件的 Options 選項?

  • 可以通過打印 config()方法的返回值,查看 Options 選項 print(fred.config())
  • 通過在 IDE 中,ctrl+鼠標(biāo)左鍵 即可進入組件對象的構(gòu)造方法,進入到方法內(nèi)觀察:

上面代碼中有:“standard options 標(biāo)準(zhǔn)選項”和“widget-specific options 組件特定選項”. 我們將常見的選項匯總?cè)缦拢?/p>

Button 按鈕

Button(按鈕)用來執(zhí)行用戶的單擊操作. Button 可以包含文本,也可以包含圖像 按鈕被單擊后會自動調(diào)用對應(yīng)事件綁定的方法. 相關(guān)屬性參數(shù)介紹見上面Options 選項詳解部分圖片。

實操代碼:

"""
Button(按鈕)用來執(zhí)行用戶的單擊操作
Button 可以包含文本,也可以包含圖像。按鈕 被單擊后會自動調(diào)用對應(yīng)事件綁定的方法
"""
from tkinter import *
from tkinter import messagebox


class Application(Frame):
    def __init__(self, master):
        super().__init__(master)  # super()代表的是父類的定義, 而不是父類的對象
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """創(chuàng)建組件"""
        self.btn01 = Button(root, text="登錄", width=4, height=1, anchor=NE, command=self.login)
        self.btn01.pack()

        global photo
        photo = PhotoImage(file="111.gif")
        self.btn02 = Button(root, image=photo, command=self.login)
        self.btn02.pack()
        self.btn02.config(state="disabled")  # 設(shè)置按鈕為禁用

    def login(self):
        messagebox.showinfo("智慧終端學(xué)習(xí)系統(tǒng)", "登錄成功!歡迎開始學(xué)習(xí)!")


if __name__ == '__main__':
    root = Tk()
    root.title("測試Button")
    root.geometry("400x400+200+300")
    app = Application(master=root)
    root.mainloop()

運行結(jié)果:

利用 lambda 表達式實現(xiàn)傳參

lambda 表達式定義的是一個匿名函數(shù),只適合簡單輸入?yún)?shù),簡單計算返回結(jié)果,不適合功能復(fù)雜情況lambda 定義的匿名函數(shù)也有輸入、也有輸出,只是沒有名字。

語法格式如下:

lambda 參數(shù)值列表:表達式

lambda 表達式的參數(shù)值列表可以為如下內(nèi)容

實操代碼:

from tkinter import Tk, Button

root = Tk()
root.geometry("270x50")


def mouseTest1():
    print("command 方式,簡單情況:不涉及獲取 event 對象,可以使用")


def mouseTest2(a,b):
    print("a={0},b={1}".format(a,b))


Button(root, text="測試 command1", command=mouseTest1).pack(side="left")
"""
lambda 定義的匿名函數(shù)也有輸入、也有輸出,只是沒有名字。語法格式如下: lambda 參數(shù)值列表:表達式 參數(shù)值列表即為輸入。 表達式計算的結(jié)構(gòu)即為輸出。
"""
Button(root, text="測試 command2", command=lambda: mouseTest2("實參1傳入", "實參2傳入")).pack(side="left")
root.mainloop()

結(jié)果展示:

Entry 單行文本框

Entry 用來接收一行字符串的控件. 如果用戶輸入的文字長度長于 Entry 控件的寬度時, 文字會自動向后滾動 如果想輸入多行文本, 需要使用 Text 控件.

Entry構(gòu)造函數(shù)如下圖,  相關(guān)屬性參數(shù)介紹見上面Options 選項詳解部分圖片:

實操代碼:

"""
Entry 用來接收一行字符串的控件。如果用戶輸入的文字長度長于 Entry 控件的寬度時,
文字會自動向后滾動。如果想輸入多行文本, 需要使用 Text 控件。
"""
# 【示例】Entry 單行文本框?qū)崿F(xiàn)簡單登錄界面
from tkinter import *
from tkinter import messagebox


class Appliaction(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        """創(chuàng)建登錄界面的組件"""
        self.label01 = Label(self, text="用戶名")
        self.label01.pack()

        # StringVar 變量綁定到指定的組件
        # StringVar 變量的值發(fā)生變化,組件內(nèi)容也變化;
        # 組件內(nèi)容發(fā)生變化,StringVar 變量的值也發(fā)生變化
        v1 = StringVar()
        self.entry01 = Entry(self, textvariable=v1)
        self.entry01.pack()
        v1.set("admin")
        print(v1.get())
        print(self.entry01.get())

        # 創(chuàng)建密碼框
        self.btn02 = Label(self, text="密碼")
        self.pack()

        v2 = StringVar()
        self.entry02 = Entry(self, textvariable=v2, show="*")
        self.entry02.pack()

        Button(self, text="登錄", command=self.login).pack()

    def login(self):
        title = "智慧終端學(xué)習(xí)系統(tǒng)"
        username = self.entry01.get()
        pwd = self.entry02.get()

        print("去數(shù)據(jù)庫對比密碼")
        print("用戶名" + username)
        print("密碼" + pwd)
        if username == "TimePause" and pwd == "123456":
            messagebox.showinfo(title, "登陸成功! 歡迎開始學(xué)習(xí)!")
        else:
            messagebox.showinfo(title, "登錄失敗, 用戶名密碼錯誤")


if __name__ == "__main__":
    root = Tk()
    root.title("智慧終端學(xué)習(xí)系統(tǒng)")
    root.geometry("400x130+200+300")
    app = Appliaction(master=root)
    root.mainloop()

結(jié)果展示:

Text 多行文本框

Text(多行文本框)的主要用于顯示多行文本,還可以顯示網(wǎng)頁鏈接, 圖片, HTML 頁面, 甚至 CSS 樣式表,添加組件等因此,也常被當(dāng)做簡單的文本處理器、文本編輯器或者網(wǎng) 頁瀏覽器來使用。比如 IDLE 就是 Text 組件構(gòu)成的。

Text 構(gòu)造函數(shù)如下圖,  相關(guān)屬性參數(shù)介紹見上面Options 選項詳解部分圖片:

實操代碼:

"""
Text(多行文本框)的主要用于顯示多行文本,還可以顯示網(wǎng)頁鏈接, 圖片, HTML 頁面, 甚至 CSS 樣式表,添加組件等。
因此,也常被當(dāng)做簡單的文本處理器、文本編輯器或者網(wǎng) 頁瀏覽器來使用。比如 IDLE 就是 Text 組件構(gòu)成的。
"""
from tkinter import *
import webbrowser


class Application(Frame):
    def __init__(self, master=None):   # 這里相當(dāng)于java中定義了一個帶參構(gòu)造. master指代的是一個形參, 為后面創(chuàng)建類的對象時使用
        super().__init__(master)  # super()代表的是父類的定義,而不是父類對象
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        self.w1 = Text(root, width=40, height=12, bg="gray")  # 寬度 20 個字母(10 個漢字),高度一個行高
        self.w1.pack()
        self.w1.insert(1.0, "0123456789\nabcdefg")
        self.w1.insert(2.3, "鋤禾日當(dāng)午,汗滴禾下土。誰知盤中餐,粒粒皆辛苦\n")

        Button(self, text="重復(fù)插入文本 ", command=self.insertText).pack(side="left")
        Button(self, text="返回文本", command=self.returnText).pack(side="left")
        Button(self, text="添加圖片", command=self.addImage).pack(side="left")
        Button(self, text="添加組件", command=self.addWidget).pack(side="left")
        Button(self, text="通過 tag 精確控制文本 ", command=self.testTag).pack(side="left")

    def insertText(self):
        self.w1.insert(INSERT, ' 測試插入 ')    # INSERT 索引表示在光標(biāo)處插入
        self.w1.insert(END, '測試尾插')         # END 索引號表示在最后插入
        self.w1.insert(1.8, "測試指定位置插入")     # Indexes(索引)是用來指向 Text 組件中文本的位置,Text 的組件索引也是對應(yīng)實際字符之間的位置

    def returnText(self):
        print(self.w1.get(1.2, 1.6))
        print("所有文本內(nèi)容:\n" + self.w1.get(1.0, END))  # 核心:行號以 1 開始 列號以 0 開始

    def addImage(self):
        global photo
        self.photo = PhotoImage(file="111.gif")
        self.w1.image_create(END, image=self.photo)

    def addWidget(self):
        b1 = Button(self.w1, text='創(chuàng)建一個新組件')  # 在 text 創(chuàng)建組件的命令
        self.w1.window_create(INSERT, window=b1)

    def webshow(self):
        webbrowser.open("http://www.baidu.com")

    def testTag(self):
        self.w1.delete(1.0, END)
        self.w1.insert(INSERT, "good good study,day day up!\n 測試 baidu\n Tag標(biāo)簽\n 精準(zhǔn)控制文本")
        self.w1.tag_add("good", 1.0, 1.9)
        self.w1.tag_config("good", background="yellow", foreground="red")
        self.w1.tag_add("baidu", 4.1, 4.3)
        self.w1.tag_config("baidu", underline=True)
        self.w1.tag_bind("baidu", "<Button-1>", self.webshow)


if __name__ == '__main__':
    root = Tk()
    root.title("測試多行文本text")
    root.geometry("450x300+200+300")
    app = Application(master=root)
    root.mainloop()

結(jié)果展示:

Radiobutton 單選按鈕

Radiobutton 控件用于選擇同一組單選按鈕中的一個, 可以顯示文本,也可以 顯示圖像。

實操代碼:

"""測試 Radiobutton 組件的基本用法,使用面向?qū)ο蟮姆绞?""
from tkinter import Frame, Radiobutton, Button, messagebox, Tk, StringVar


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):     # 定義組件
        self.v1 = StringVar()
        self.v1.set("F")

        self.r1 = Radiobutton(self, text="男性", value="M", variable=self.v1)     # 定義單選框
        self.r2 = Radiobutton(self, text="女性", value="F", variable=self.v1)
        self.r1.pack(side="left")
        self.r2.pack(side="left")

        Button(self, text="確定", command=self.confirm).pack(side="left")

    def confirm(self):
        messagebox.showinfo("測試", "選擇性別" + self.v1.get())   # 定義彈窗信息


if __name__ == '__main__':
    root = Tk()
    root.geometry("400x50+200+300")
    app = Application(root)
    root.mainloop()

結(jié)果展示:

Checkbutton 復(fù)選按鈕

Checkbutton 控件用于選擇多個按鈕的情況.  可以顯示文本,也可以顯示圖像。

實操代碼:

"""測試 Checkbutton 組件的基本用法,使用面向?qū)ο蟮姆绞?""
from tkinter import Frame, IntVar, Checkbutton, Button, messagebox, Tk


class Application(Frame):
    # 創(chuàng)建構(gòu)造方法
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()
        self.createWidget()

    # 創(chuàng)建組件, 創(chuàng)建復(fù)選框并設(shè)置屬性.
    def createWidget(self):
        self.codeHobby = IntVar()
        self.videoHobby = IntVar()

        self.c1 = Checkbutton(self, text="敲代碼", variable=self.codeHobby, onvalue=1, offvalue=0)
        self.c2 = Checkbutton(self, text="看視頻", variable=self.videoHobby, onvalue=1, offvalue=0)
        self.c1.pack(side="left")
        self.c2.pack(side="left")

        # 創(chuàng)建確定按鈕并創(chuàng)建對象的提示框
        self.b = Button(self, text="確定", command=self.showInfo).pack(side="left")  # 這里command傳入的是方法的對象

    def showInfo(self):
        if self.codeHobby.get() == 1 and self.videoHobby.get() == 1:
            messagebox.showinfo("提示框", "既愛看視頻又愛學(xué)習(xí), 來我這里學(xué)編程吧")
        elif self.codeHobby.get() == 1:       # IntVar需要調(diào)用get方法才能獲得
            messagebox.showinfo("提示框", "你這個人愛學(xué)習(xí)編程啊, 學(xué)python吧")
        elif self.videoHobby.get() == 1:
            messagebox.showinfo("提示框", "你這個人比較愛看視頻啊, 少看點")
        else:
            messagebox.showinfo("提示框", "啥都不愛啊, 隨便選一個作為你的愛好吧")


# 啟動方法以及相關(guān)組件信息
if __name__ == "__main__":
    root = Tk()
    root.geometry("400x50+200+300")
    app = Application(root)
    root.mainloop()

結(jié)果展示:

canvas 畫布

canvas(畫布)是一個矩形區(qū)域,可以放置圖形、圖像、組件等。

實操代碼:

import random
from tkinter import Frame, Canvas, PhotoImage, Button, Tk


class Application(Frame):
    # 1. 初始化
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()
        self.createWidget()

    def createWidget(self):
        # 2. 組件相關(guān)
        self.canvas = Canvas(self, width=300, height=200, bg="green")
        self.canvas.pack()
        # 畫一條線
        line = self.canvas.create_line(10, 10, 30, 20, 40, 50)
        # 畫矩形
        reat = self.canvas.create_rectangle(50, 50, 100, 100)
        # 畫橢圓, 前后一對坐標(biāo)為橢圓的邊界矩形左上角和底部右下角
        oval = self.canvas.create_oval(50, 50, 100, 100)

        global photo
        photo = PhotoImage(file="111.gif")
        self.canvas.create_image(250, 250, image=photo)

        Button(self, text="來畫10個矩形", command=self.draw10rect).pack(side="left")

    def draw10rect(self):
        for i in range(0, 10):
            x1 = random.randrange(int(self.canvas["width"]) / 2)
            y1 = random.randrange(int(self.canvas["height"]) / 2)
            x2 = x1 + random.randrange(int(self.canvas["width"]) / 2)
            y2 = y1 + random.randrange(int(self.canvas["height"]) / 2)
            self.canvas.create_rectangle(x1, y1, x2, y2)


if __name__ == "__main__":
    root = Tk()
    root.geometry("400x300+200+300")
    app = Application(root)
    root.mainloop()

結(jié)果展示:

不同于之前的信徒, 大主教和大祭司實力更加強大, 而且被控制的程度更深. GSC事先進行了分工: 由導(dǎo)師GSC對付大主教, 而了不起對付大祭司. 而當(dāng)面對真正的強者時, GSC才真正認真起來. 開啟名為殺意波動的領(lǐng)域, 只見很大一片區(qū)域內(nèi), 包括了不起和大祭司所在的區(qū)域, 處在領(lǐng)域內(nèi)的敵人行動明顯變得遲緩, 并且眼神中的瘋狂仿佛被壓制了不少. 了不起趕緊抓住機會, 使用起最近學(xué)習(xí)到的突刺技能, 在奧菲利亞的增幅下, 命中領(lǐng)主. 大祭司受傷之后, 開始瘋狂的召喚GBK教徒, 向其沖去. 然而在導(dǎo)師領(lǐng)域和奧菲利亞的增幅下, 不一會便將這些教徒擊暈. 了不起毫不畏懼,步步為營. 近身戰(zhàn)結(jié)合遠程法術(shù), 花費半天時間終于將其在絲血時擊暈. 最后在奧菲利亞的凈化魔法的幫助下, 大主教和大祭司都恢復(fù)了意識. 而他們脫口而出的第一句話, 便讓了不起驚掉下巴...??

之間他們蘇醒之后, 脫口而出的第一句話便是: 偉大的教主大人, 請原諒我等所犯下的罪行...什么? 原來了不起拯救的紅發(fā)少女是GBK的教主. 在他們?nèi)邷贤ㄍ戤吅? 奧菲利亞也略顯歉意地向了不起解釋道, 由于之前得知阿拉德大陸上的人都比較奸詐的, 擔(dān)心我們圖謀不軌, 因此沒說明其真正身份. 在幫助大祭司和大神官接觸控制之后, 明白了我們的偉人, 于是說明情況并請求我們的原諒. 而了不起的心里也有震驚中慢慢恢復(fù), 在原諒了她之后便回到GBK外圍住所從長記憶...而了不起由于這兩天參與的高強度戰(zhàn)斗與大批量敵人的遭遇, 竟然從lv17升到了lv20。

責(zé)任編輯:趙寧寧 來源: Python技術(shù)
相關(guān)推薦

2024-12-23 16:00:00

GUI編程tkinter

2025-02-24 10:17:48

2025-03-18 07:30:00

編程并發(fā)Python

2025-02-18 08:30:00

GUIPythontkinter

2024-12-23 14:54:47

2025-03-24 10:06:35

2025-03-04 07:40:00

Python模塊開發(fā)

2025-03-03 10:16:04

2017-06-12 17:54:45

Python編程

2019-10-24 09:29:13

編程Python程序

2012-12-28 13:35:37

網(wǎng)絡(luò)無線網(wǎng)絡(luò)

2015-07-28 17:11:00

編程技術(shù)提升

2009-09-08 14:30:57

CCNA認證考試

2016-10-31 20:13:41

大數(shù)據(jù)數(shù)據(jù)分析

2023-11-30 15:02:34

Python

2023-11-27 19:42:56

Python GUI編程

2019-07-23 18:15:26

技術(shù)大數(shù)據(jù)數(shù)據(jù)庫

2021-08-31 15:56:06

編程技能開發(fā)

2024-04-28 09:28:49

2009-06-10 18:18:43

Java GUI用戶界面
點贊
收藏

51CTO技術(shù)棧公眾號