【问题标题】:Python, Tkinter - some general questions about the codePython, Tkinter - 关于代码的一些一般问题
【发布时间】:2021-08-29 17:26:17
【问题描述】:

我对以下工作代码有一些一般性问题:
  1. tkinter 是图形界面库,据我了解,我可以将它与 Kivy 等互换使用?
  2. 学习 Kivy 会更好还是其他更好?
  3. import tkinter as tkfrom tkinter import * 行完全相同,但在第一行中我有别名?
  4. 在下面的代码中,为什么我必须在ttk.Progressbar中使用ttk?
    我用import tkinter as tk 导入了整个库,那么为什么我必须重新导入 ttk 只是为了进度条? (否则它不起作用)。我希望能工作。喜欢tk.Progressbar
  5. btnProg = tk.Button(self.root, text = 'update', command=self.fnUpdateProgress) 行中,为什么方法“fnUpdateProgress”不能有任何变量?每当我添加任何内容时,按钮都会停止工作? -> 例如btnProg = tk.Button(self.root, text = 'update', command=self.fnUpdateProgress(24))(ofc 然后在方法本身的 def 中进行一些更改)
  6. 我创建了进度条 (pb) 作为类 Test 的属性,但是将其定义为常规变量(没有 self)是否会更好?老实说,代码的工作原理完全相同。

代码:

import tkinter as tk    
from tkinter import *
from tkinter import ttk

from CreateProgramMain import main
import GlobalVariables

class Test():
    ####################################################################################
    def __init__(self):
        self.Progress=0
        self.root = tk.Tk()
        self.root.title(GlobalVariables.strAppName)
        self.root.geometry('400x200')
    
        lbl = Label(self.root, text="Please choose environment.",font=("Arial Bold", 12))
        lbl.grid(column=2, row=0,sticky='e') 

        def btnTestClicked():
            main("TEST",self)
        btnTest=tk.Button(self.root, text="Test Environment", command=btnTestClicked)
        btnTest.grid(column=2, row=15)

        #Place progress bar
        pb = ttk.Progressbar(self.root,orient='horizontal',mode='determinate',length=200)
        pb.grid(column=1, row=65, columnspan=2, padx=10, pady=20)    
        pb["value"]=self.Progress
        pb["maximum"]=100

        btnProg = tk.Button(self.root, text = 'update', command=self.fnUpdateProgress)
        btnProg.grid(column=2, row=75)
        self.root.mainloop()

    def fnUpdateProgress(self): #why i cant insert variable inside?
            pb["value"]=self.Progress
            self.Progress=self.Progress+5
            pb.update()
app = Test()

谢谢

【问题讨论】:

    标签: python tkinter


    【解决方案1】:
    1. 由您决定。但是,tkinterkivy 都有自己的语法、命令和用法。将tkinter 代码转换为kivy 可能有点困难。
    2. 由你决定
    3. 是的。首先,您将tkinter 导入为tk。在第二个。您已完成通配符导入。您已导入所有内容
    4. Tkinter 是一个包含各种模块的文件夹。它包含一个名为ttk.py 的文件,您必须导入该文件才能访问ttk

    LabelEntryTk 等所有其他类都存在于 __init__.py

    1. 您必须使用 lambda。如果调用该函数,它会立即执行,返回值作为命令保存。

    执行command=self.fnUpdateProgress(24)) 将立即执行该功能。然后,返回值作为命令保存。在这里,它返回None。所以命令什么都不是,或者按钮没用。

    使用lambda 表达式command=lambda: self.fnUpdateProgress(24))

    1. 如果您不添加self,它将仅对函数本地。要在外部访问 ot,必须将其声明为全局,这是使用类时要避免的一点

    【讨论】:

    • "tkinter 是图形界面库,据我了解,我可以将它与 Kivy 等互换使用?":您对此的回答是,“取决于你。”?将 tkinter 制作的项目转移到 Kivy 是不可能的(例如 qtdesigner 如何提供 python 和 cpp 代码)。
    • @CoolCloud 也许我误解了这个问题
    • @Sujay 谢谢你的回答:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多