【问题标题】:How to make radiobutton selected by default change some options in tkinter?如何在默认情况下选择单选按钮更改 tkinter 中的某些选项?
【发布时间】:2021-05-17 07:11:18
【问题描述】:

我无法默认选中我的单选按钮隐藏密码输入小部件(PasswordEntry)中输入的单词,我的代码如下,我尝试了很多方法但失败了,我不知道出了什么问题,通常是 if 语句本来可以工作的,我也尝试过,但最糟糕的是,小部件崩溃了。如何使 if 语句按预期工作?提前感谢您的帮助。

from tkinter import *
import tkinter.messagebox 
from win32api import GetSystemMetrics
import tkinter.font as TkFont
from PIL import ImageTk,Image
import tkinter.font
from tkinter import ttk
from tkinter import Tk



PasswordAsker=Tk() 

screen_x = int(PasswordAsker.winfo_screenwidth())
screen_y = int(PasswordAsker.winfo_screenheight())

window_x = 492
window_y = 150

posX = (screen_x // 2) - (window_x // 2)
posY = (screen_y // 2) - (window_y // 2)

geo = "{}x{}+{}+{}". format(window_x, window_y, posX, posY)  


PasswordAsker.geometry(geo)
PasswordAsker.config(background="gray8")
PasswordAsker.resizable(0,0)
PasswordAsker.title("Enter the password")
PasswordAsker.config(relief="raised")




def kill():
    PasswordAsker.destroy()

          
PasswordLabel = Label(PasswordAsker, text = 'Enter the password', font=('TkDefaultFont', 9, "bold")) 

PasswordLabel.config(background="gray8")
PasswordLabel.config(foreground="red3")   

PasswordEntry = Entry(PasswordAsker, textvariable = name_var,font=('TkDefaultFont',12,'normal'),width=30,borderwidth=5, relief="sunken", selectbackground="dark red") 

PasswordEntry.config(highlightbackground="gray15")
PasswordEntry.config(foreground="red")
PasswordEntry.config(highlightthickness=3)
PasswordEntry.config(highlightcolor="dark red")
PasswordEntry.config(background="gray15")




OkButton=Button(PasswordAsker,text = 'Okay',command = mainwindow, font=('TkDefaultFont', 9, "bold"),borderwidth=5, relief="sunken", activebackground="dark red", bg="gray15",fg="red3")
CancelBtn=Button(PasswordAsker,text = 'Cancel',command = kill, font=('TkDefaultFont', 9, "bold"),borderwidth=5, relief="sunken", activebackground="dark red", bg="gray15",fg="red3")
visibilityOptn = LabelFrame(PasswordAsker, text="Password visibility", height=60, width=130)

PasswordLabel.place(x=5, y=18)
PasswordEntry.place(x=125, y=10)

OkButton.configure(height=1, width=6)
OkButton.place(x=422, y=12)

CancelBtn.configure(height=1, width=6)
CancelBtn.place(x=422, y=52)

visibilityOptn.configure(font=('TkDefaultFont', 8, "bold"), foreground="red3", background="gray8")
visibilityOptn.place(x=260, y=62)


i = StringVar()

w1 = Radiobutton (visibilityOptn,text="Hide",value=1, variable=i, bg="gray8", fg="red3", activebackground="dark red")

w2 = Radiobutton (visibilityOptn,text="Show",value=2, variable=i, bg="gray8", fg="red3", activebackground="dark red")

w1.pack(side="left")
w2.pack(side="right")


if (i.get() ==1):
    PasswordEntry.config(show="•")

else:
    PasswordEntry.config(show="")

i.set("1")

PasswordAsker.mainloop() 


    

【问题讨论】:

  • 您有什么具体原因不使用复选框吗?我可以给你一个解决方案,但如果你想要一个复选框,它会容易得多。
  • 您在创建单选按钮后大约一毫秒调用i.get(),并且您没有为单选按钮指定默认值。
  • @TheLizzard 我更喜欢单选按钮,请提供您的解决方案
  • @BryanOakley 请问我该怎么做? .set 不是已经给出默认值了吗?我在想我已经给了它但是晚了
  • @Shadow Kurgansk 您希望默认选项是什么?隐藏还是显示?

标签: python-3.x tkinter radio-button


【解决方案1】:

这些是我将对您的代码进行的更改:

...  

PasswordEntry = Entry(..., show="•") 

...

w1 = Radiobutton(visibilityOptn,text="Hide", value=1, bg="gray8", fg="red3", activebackground="dark red", command=lambda: PasswordEntry.config(show="•"))
w2 = Radiobutton(visibilityOptn,text="Show", value=2, bg="gray8", fg="red3", activebackground="dark red", command=lambda: PasswordEntry.config(show=""))

w1.select()

w1.pack(side="left")
w2.pack(side="right")

PasswordAsker.mainloop()

基本上,我在条目的构造函数中默认隐藏了密码。我还在每个单选按钮上放置了一个命令,使用 lambda 函数更改条目的状态。

【讨论】:

猜你喜欢
  • 2011-08-01
  • 2019-03-29
  • 2016-04-15
  • 1970-01-01
  • 2018-09-04
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
相关资源
最近更新 更多