You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python TK界面按钮布局与单选框值调用问题求助

Hey there! Let's tackle your Tkinter issues one by one. I've gone through your code and identified the root causes of each problem—here's how to fix them:

1. Fixing Button Layout Issues

Your current code shoves all buttons into a single frame, forcing them to align horizontally. To get your desired layout:

  • Create a dedicated frame for the "Links" and "Comments" buttons, then use default pack() (which stacks elements vertically) to place them under the radio buttons.
  • Make a separate frame for the "Start" and "Cancel" buttons, and anchor this frame to the bottom of the window so it stays put there.

2. Accessing Radio Button Values in star_program

The main problem here is how you're passing the radio value to the function:

  • When you write command=star_program(v.get()), you're immediately running the function when the button is created (that's why ifconfig executes on startup!), not when the button is clicked.
  • Instead, let star_program directly fetch the current value of the radio button variable when it's triggered—this ensures you always get the latest selected option.

3. Fixing the Start Button Auto-Execution

As noted above, the auto-run happens because you're calling the function right away instead of passing a reference to it. By updating the button's command to point to the function itself (without parentheses), you'll only trigger it when the button is clicked.

Modified Full Code

import tkinter as tk
import os

root = tk.Tk()
root.title("START")
root.geometry("500x300+500+200")  # Increased height to fit vertical buttons comfortably

v = tk.IntVar()
v.set(0)  # Initialize default choice
my_choice = [("Basic", 1), ("Advanced", 2), ('Extreme', 3)]

def ShowChoice():
    print(v.get())

# Radio button section
tk.Label(root, text="""Choose your configuration:""", justify=tk.LEFT, padx=20).pack(anchor=tk.W)
for val, choice in enumerate(my_choice):
    # Fixed text display to show the first element of each tuple
    tk.Radiobutton(root, text=choice[0], padx=20, variable=v, command=ShowChoice, value=val).pack(anchor=tk.W)

# Frame for vertical Links/Comments buttons
vertical_buttons_frame = tk.Frame(root)
vertical_buttons_frame.pack(pady=10, anchor=tk.W, padx=20)

open_file_c = tk.Button(vertical_buttons_frame, text="Comments", command=open_comments_file)
open_file_c.pack(fill=tk.X)  # Fill frame width for better alignment

open_file_f = tk.Button(vertical_buttons_frame, text="Links", command=open_links_file)
open_file_f.pack(fill=tk.X, pady=(5, 0))  # Add small top margin between buttons

# Updated star_program to fetch current radio value
def star_program():
    selected_value = v.get()
    if selected_value == 0:
        os.system("ifconfig")
    else:
        print("Goodbye")  # Fixed Python 3 syntax (print is a function)

def open_comments_file():
    os.system("gedit /home/user/Desktop/comments.txt")

def open_links_file():
    os.system("gedit /home/user/Desktop/links.txt")

# Frame for bottom-aligned Start/Cancel buttons
bottom_buttons_frame = tk.Frame(root)
bottom_buttons_frame.pack(side=tk.BOTTOM, fill=tk.X, padx=20, pady=10)

button = tk.Button(bottom_buttons_frame, text="Start", command=star_program)  # Pass function reference, not call it
button.pack(side=tk.LEFT)

slogan = tk.Button(bottom_buttons_frame, text="Cancel", command=root.quit)  # Use root.quit for clearer Tkinter context
slogan.pack(side=tk.RIGHT)

root.mainloop()

Key Improvements:

  • Layout: Buttons are now split into two frames—vertical buttons under the radio group, and control buttons anchored to the window bottom.
  • Radio Value Handling: star_program now gets the latest selected value when the button is clicked, so it always uses the current choice.
  • Start Button Fix: No more auto-execution—function only runs when you click the button.
  • Syntax Fix: Updated print "Goodbye" to print("Goodbye") to work with Python 3.
  • Text Display: Fixed radio button labels to show the actual configuration name (e.g., "Basic" instead of the tuple).

内容的提问来源于stack exchange,提问作者user3472065

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:25:35