小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python學(xué)習(xí)筆記(三)tkinter常見問題總結(jié)...

 昵稱45893186 2022-11-15 發(fā)布于浙江

Tkinter

問題一:控件使用bind事件時,報錯:TypeError: versioninfo_Msgbox() takes 1 positional argument but 2 were given

        self.version_info_label = Label(self.init_window_name,text='版本更新日志',underline= -1,font=('',6),fg='blue')

        self.version_info_label.grid(row=12, column=1,sticky=E+S)

        self.version_info_label.bind('<Button-1>',self.versioninfo_Msgbox)

versioninfo_Msgbox這里默認已經(jīng)有2個參數(shù)了:1、定義在class方法內(nèi),有一個默認self傳參  2、使用了bind方法,默認有一個event事件參數(shù)

所以,versioninfo_Msgbox方法要定義2個參數(shù):

    def versioninfo_Msgbox(event,self):

        messagebox.showinfo(title="更新日志",message="1、新增訂金支付、尾款支付\n2、新增自動獲取支付金額\n3、新增國內(nèi)、海外,國內(nèi)沒有自測過\n4、只支持普通訂單、訂金訂單\n5、新增獲取BE配置項功能\n6、bug聯(lián)系yangsheng 00011533")

問題二:如何通過點擊事件創(chuàng)建一個新窗口

一開始直接新建一個py文件,重新寫了一個gui’實現(xiàn),然后穿件tk實例,mainloop。主py文件的按鈕事件調(diào)用新py里的gui mainloop實例。發(fā)現(xiàn)存在問題,控件初始化會錯亂。

解決方法,使用tkinter的子窗口方法,Toplevel:這里的init_window_name就是主窗口的TK()實例,生成一個Toplevel的子窗口實例,傳給SUB_GUI進行控件初始化sub_init_windos.

    def sub_Window(self):

        BE_WINDOW = Toplevel(self.init_window_name)

        BE_PORTAL = SUB_GUI(BE_WINDOW)

        BE_PORTAL.sub_init_window()

問題三:如果在主窗口設(shè)置子窗口

      主窗口點擊button后,調(diào)用方法拉起子窗口

    def get_BE_Config(self):

        BE_WINDOW = Toplevel(self.init_window_name)  這里的init_window_name 就是實例化的TK()父窗口   Tkinter Toplevel:頂層部件的工作,直接由窗口管理器管理的窗口

        BE_PORTAL = SUB_GUI(BE_WINDOW)   //子窗口定義的類SUB_GUI,初始化對象

        BE_PORTAL.BeConfig_init_window()  調(diào)用子窗口的頁面元素

問題四:使用grid窗格方式布局出現(xiàn)的問題

        self.init_window_name.title("test")           #窗口名

        #self.init_window_name.geometry('200x160+10+10')                         #290 160為窗口大小,+10 +10 定義窗口彈出時的默認展示位置

        self.init_window_name.geometry('310x600+90+20')

        #self.init_window_name["bg"] = "pink"                                    #窗口背景色,其他背景色見:blog.csdn.net/chl0000/article/details/7657887

        #self.init_window_name.attributes("-alpha",0.9)                          #虛化,值越小虛化程度越高

        #label1

        self.init_data_label = Label(self.init_window_name, text="label1")

        self.init_data_label.grid(row=0, column=0,padx=2)

        self.init_data_entry_uid = Entry(self.init_window_name)

        self.init_data_entry_uid.grid(row=0,column=1,padx=0,pady=5,sticky=W)

        #label2

        self.result_data_label = Label(self.init_window_name, text="label2 long name")

        self.result_data_label.grid(row=1, column=0,padx=2)

        self.init_data_entry_ordernum = Entry(self.init_window_name)

        self.init_data_entry_ordernum.grid(row=1,column=1,padx=0,pady=5,sticky=W)

        #radio

        self.env_data = tkinter.IntVar()

        self.env_data.set(ENV_DATA)

        self.env_data_radiobtn = Radiobutton(self.init_window_name,text='radio1',variable=self.env_data,value=0,command=self.get_env_data)

        self.env_data2_radiobtn = Radiobutton(self.init_window_name,text='radio2',variable=self.env_data,value=1,command=self.get_env_data)

        self.env_data_radiobtn.grid(row=2,column=0,padx=5,sticky=W)

        self.env_data2_radiobtn.grid(row=2,column=1,padx=5,sticky=W)

        ##樣式分割

        self.separator = ttk.Separator(self.init_window_name,orient=HORIZONTAL,style='black.TSeparator')

        self.separator.grid(row=3,column=0,columnspan=2, padx=10, pady=5,sticky=EW)

        #下拉框

        self.result_data_label = Label(self.init_window_name, text="label3")

        self.result_data_label.grid(row=4, column=0,sticky=E+W)

        self.combobox = ttk.Combobox(

            master=self.init_window_name,  # 父容器

            height=7,  # 高度,下拉顯示的條目數(shù)量

            width=25,  # 寬度

            state='readonly',  # 設(shè)置狀態(tài) normal(可選可輸入)、readonly(只可選)、 disabled

            cursor='arrow',  # 鼠標(biāo)移動時樣式 arrow, circle, cross, plus...

            font=('', 12),  # 字體

            textvariable='test',  # 通過StringVar設(shè)置可改變的值

            values=OPERATE_VALUES,  # 設(shè)置下拉框的選項

            )

        self.combobox.current(0)

        self.combobox.grid(row=4,column=1,pady=2,padx=2,sticky=W)

        #確定按鈕

        self.modify_order_status_button = Button(self.init_window_name, text="確定", bg="lightblue", width=10,command=self.__modify_order_status)  # 調(diào)用內(nèi)部方法  ()為直接調(diào)用

        self.modify_order_status_button.grid(row=5, column=1,padx=5,pady=10,sticky=E)

這個grid中的column 0沒有對齊,按照row 1的最大長度被拉伸了,這時候修改row 1label控件,效果會相對整齊,如下:

        self.result_data_label = Label(self.init_window_name, text="label2")

如果label2的名字確實很長,那么修改幾個label的對齊方式,在grid方法中添加sticky=Wwest,左對齊),效果如下:

self.init_data_label.grid(row=0, column=0,padx=2,sticky = W)

這時候發(fā)現(xiàn)由于column 0的長度拉伸,column 1的部分組件展示截斷了:

解決辦法,調(diào)整windowgeometry的寬度:

self.init_window_name.geometry('310x600+90+20')

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約