小编App*_*ple的帖子

tk messagebox导入混乱

我刚刚开始学习tkinter,当导入messagebox时,我发现我一定不能理解import语句.

令我困惑的是:

import tkinter as tk

def text_box():
    if tk.messagebox.askokcancel("Quit", "Never Mind"):
        root.destroy()

root = tk.Tk()
button = tk.Button(root, text="Press the button", command=text_box)
button.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

编译好,但按下按钮会出错'module' object has no attribute 'messagebox',而代码:

import tkinter as tk
from tkinter import messagebox

...
    if messagebox.askokcancel("Quit", "Never Mind"):
...
Run Code Online (Sandbox Code Playgroud)

......工作顺利.

如果我导入,我会收到类似的错误from tkinter import *.

tkinter的帮助显示messagebox在列表中PACKAGE CONTENTS,但我无法以正常方式加载它.

所以我的问题是,为什么......以及我不理解的导入是什么?

我想应该提一下 - 代码只能在Python 3中运行,并且在Python 2.x messagebox中调用tkMessageBox并且没有定义tkinter.

python import tkinter python-3.x

9
推荐指数
1
解决办法
2万
查看次数

为什么成员变量没有传递给修改过的函数?

我仍然在探索C++,试图找出它是如何工作的,并遇到了令我困惑的事情.

我有一个简单地拥有一个list<string>并且具有一些成员函数的类

class String_list {
      public:
            String_list(istream&);
            //other functions
            list<string> listing;
};
Run Code Online (Sandbox Code Playgroud)

我编写了我的构造函数来使用非成员函数

String_list::String_list(istream& in) { get_strings(in, listing); }
Run Code Online (Sandbox Code Playgroud)

同

istream& get_strings(istream& in, list<string> lstring)
{
  if(in) {
       lstring.clear();

       string word;

       while (in >> word) 
               lstring.push_back(word);

       in.clear();
       }
  return in;
 }
Run Code Online (Sandbox Code Playgroud)

问题是,虽然get_string函数似乎有效,但它不会更改listing我传递给它的成员变量.

我可以通过只更改为get_strings使用一个参数创建一个成员函数来使它工作,所以我假设从构造函数中传递列表由于某种原因不起作用,或者非成员函数不能改变成员变量,但这些似乎是我的编译器很容易接受的东西.(istream& in)lstringlisting

当我运行成员列表总是.size()为0 的可执行文件时,我的编译器看不到代码的任何问题.

c++ class

5
推荐指数
2
解决办法
222
查看次数

标签 统计

c++ ×1

class ×1

import ×1

python ×1

python-3.x ×1

tkinter ×1